C++的LoadLibrary动态加载dll

1、输出接口,定义函数指针

typedef short (_stdcall *pGT_SetAuTrigger)(short i, TTriggerEx* pTrigger);

2、声明变量tGT_SetAuTrigger

extern pGT_SetAuTrigger tGT_SetAuTrigger; 3、初始化变量

pGT_SetAuTrigger tGT_SetAuTrigger = NULL;

4、使用LoadLibrary函数寻找dll路径(注路径放在一级目录下,否则可能会报错)

g_hGTS = LoadLibrary(_T("\..**.dll"));

5、如果g_hGTS是空的话,通过GetLastError函数来获取错误代码()

if(g_hGTS == NULL) { int16 rtn = (short)GetLastError(); printf("Load gts.dll Failed: rtn = %d ",rtn); return rtn; } else { printf("Load gts.dll Success "); }

6、检索指定的动态链接库(DLL)中的输出库函数地址(g_hGTS)

tGT_SetAuTrigger = (pGT_SetAuTrigger)GetProcAddress(g_hGTS,_T("GT_SetAuTrigger"));

7、声明库函数,给函数重命名(extern "C"是以C语言的方式编译,如果编译CPP文件则默认的是extern "C++",而无法给用C编写的程序使用;_stdcall确定编译后的名字格式即输出名称在原名称前加一下划线,后面再加上一个“@”和其参数的总字节数)显示调用即GetProcAddress方式必须函数重命名(因为C++和C的命名规则不一致)

extern "C" short __stdcall GT_SetAuTrigger(short i,TTriggerExAlign *pTrigger);

extern "C" short __stdcall GT_SetAuTrigger(short i, TTriggerExAlign* pTrigger) { if( NULL == tGT_SetAuTrigger ) return RTN_LOAD_FUNCTION_NULL; return tGT_SetAuTrigger(i, (TTriggerEx*)pTrigger); }

经验分享 程序员 微信小程序 职场和发展