D
Decembrist
Функция DLL возвращает указатель на значение например float* function f1(); Как ее вызвать в EXE программе?
typedef float* ( CALLBACK* LPFNDLLFUNC1 )( VOID );
LPFNDLLFUNC1 lpfnDllFunc1;
HINSTANCE dllhinst;
dllhinst = LoadLibrary( "mydll" );
lpfnDllFunc1 = ( LPFNDLLFUNC1 )GetProcAddress( dllhinst, "f1" );
float* pMyFloat = f1();
Вообще в С++ указатели из фун. не возвращаются - будут проблемы.
typedef float* ( CALLBACK* LPFNDLLFUNC1 )( VOID );
LPFNDLLFUNC1 lpfnDllFunc1;
HINSTANCE dllhinst;
dllhinst = LoadLibrary( "mydll" );
lpfnDllFunc1 = ( LPFNDLLFUNC1 )GetProcAddress( dllhinst, "f1" );
и то с выделением памяти в функциях в своих длл стоит быть аккуратным
если lib приаттачиваешь к проекту, то исполняемый файл увеличится на размер твоей библиотеки
lpfnDllFunc1 = ( LPFNDLLFUNC1 )GetProcAddress( dllhinst, "f1" );
если использовать LoadLibrary, то ты подгружаешь только те функции, которые тебе нужны и только тогда, когда они тебе нужны
кроме того, либины, которые были написаны при помощи другого компилятора ты можешь и не подключить из за того, что есть нюансы.
#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);
Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab