动态库引入函数的问题
来源:互联网 发布:截面数据来源 编辑:程序博客网 时间:2024/05/22 04:54
动态库引入函数的问题,在做程序时做了一个动态库,在动态库中导出了一个 Add 函数,在自己的测试程序中用LoadLibrary,GetProAddress 方法想得到 Add 函数的地址以调用,LoadLibrary能返回句柄,但 GetProAddress(hMod, "Add")返回 0,为什么呢?
经过调查发现,是因为动态库是用 C++ 的方式实现的,也就是说是在 CPP 文件中实现的(我们现在项目的代码大部分是用 C 实现的),那么用 depends 查看动态库的函数名时,Add被加上了前缀与后缀,形成如 "?Add@AXZY"的形式,那么 GetProAddress(hMod, "?Add@AXZY") 就可以正确载入了,也就是说 depends 看到的函数名是什么,就用 GetProAddress 使用什么函数名,怎么解决有前缀与后缀的问题呢,也就是在把 C++ 的函数以 C 的形式导出呢,在动态库头文件的声明中加上
extern "C" 就可以了如下:
#ifdef __cplusplus
extern "C"
{
#endif
int Add(int, int);
#ifdef __cplusplus
}
#endif
这样 depends 中显示的就是 Add 了,当然如果用 .h 与 .lib 配合调用的方式,则不加 extern "C" 也可以
另外要注意的是在用 .h 与 .lib 配合调用动态库时,如果动态库中已有函数 Add,而自己的测试程序中还有 Add 的实现,则会出现
函数重复定义的错误
- 动态库引入函数的问题
- 动态链接库的引入
- 动态链接库DLL引入问题
- vue 的 函数引入 index 问题
- 引入第三库的问题
- Android引入动态库so的方法
- 记一次unity下引入C++动态库跨平台打包的问题
- 关于动态引入js时的顺序问题
- 关于jsp的静态和动态引入文件问题
- 静态引入和动态引入的区别
- jsp的静态引入和动态引入
- 静态引入和动态引入的理解
- 虚函数的引入
- 简说JAVA8引入函数式的问题。
- js、css的动态引入
- iOS 引入库工程遇到的问题
- jsp页面引入标签库的问题
- java 聚合工程同级相互引入函数问题。interface无法引入与父类相同级别的common中的函数
- QT 编译
- 从这里开始
- 中国软件开发需要注意的地方
- 使用Expression Blend制作Silverlight动画(视频教程)
- strcmp 与strncmp
- 动态库引入函数的问题
- 应该思考一下
- 网址收藏自给自足--免除您公司家里两边跑的痛苦
- 基于蚁群算法的TSP问题的改进
- Edge
- 20101208
- (转)面向程序员的数据库访问性能优化法则
- 项目开发经验
- 2010.11 Linux内核分析第三次作业