C++的LoadLibrary动态加载dll

C++的LoadLibrary动态加载dll,第1张

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 = %dn",rtn);
        return rtn;
    }
    else
    {
        printf("Load gts.dll Successn");
    }

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

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5432277.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-11
下一篇2022-12-11

发表评论

登录后才能评论

评论列表(0条)

    保存