栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++的LoadLibrary动态加载dll

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/456758.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号