C++的LoadLibrary动态加载dll

本文介绍了如何在C++中通过定义函数指针并调用外部DLL(动态链接库)中的函数GT_SetAuTrigger,包括类型声明、变量初始化、LoadLibrary操作、错误处理以及GetProcAddress的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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\n",rtn);
        return rtn;
    }
    else
    {
        printf("Load gts.dll Success\n");
    }

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值