если lib приаттачиваешь к проекту, то исполняемый файл увеличится на размер твоей библиотеки
Я же сказал что надо ставить Динамическую Линковку, а lib используется только для определения смещения, читай адреса вызываемой функции в длл, то что делает
Код:
lpfnDllFunc1 = ( LPFNDLLFUNC1 )GetProcAddress( dllhinst, "f1" );
. Статическая линковка да дает увеличение исполняемого файла, на то она и статическая.
если использовать LoadLibrary, то ты подгружаешь только те функции, которые тебе нужны и только тогда, когда они тебе нужны
Нет, как только ты делаешь loadlibrary вся dll мапится в адресное пространство твоего процесса. В винде нет возможности частичной подгрузки функций. Не понятно как это вообще можно реализовать, читать кусок длл?, но тогда все будет работать очень медленно, каждый вызов функции - обращение к диску, зачем же все так усложнять. Хочешь - делай несколько dll, но выигрыша реального не получишь, если у тебя dll не мегабайтные.
кроме того, либины, которые были написаны при помощи другого компилятора ты можешь и не подключить из за того, что есть нюансы.
Но это только в случае если ты юзаешь чужую либину, обычно командные проекты пишутся с использованием одних средств разработки, это определяется в спецификации на проект. Зачем увеличивать количество глюков в программе, если этого можно избежать.
Я когда-то тоже по незнанию использовал выше означеный способ, но потом понял, что есть путь гораздо проще, и большинство делают именно как написал я, так как код читать гораздо проще и глюков меньше с типами данных. А то уже какие-то проблемы с указателями пошли...., я передаю **p в функцию dll, выделяю память, а потом освобождаю в exe и НИКАКИХ проблем.
Так выглядит объявление простой функции в dll модуле:
Код:
#ifdef CVLIB_EXPORTS
#define CVLIB_API __declspec(dllexport)
#else
#define CVLIB_API __declspec(dllimport)
#endif
int CVLIB_API ubGaussSmoothing64f(unsigned char* src, double* dst, unsigned int width, unsigned int height, double sigma);
А так вызов:
Код:
ubGaussSmoothing64f(src, dst, width, height, sigma);
Предложенный вами способ оправдано использовать когда у вас нет h-файла и lib-файла. В своих проектах использовать такой подход неоправдано, лишний гемор.