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); }