Dll嵌套调用
来源:互联网 发布:快3遗漏数据分析 编辑:程序博客网 时间:2024/05/29 05:54
问题描述:
有一个公共的头文件里面有这么一段描述
#define DLL_IMPORT __declspec(dllimport)
#define DLL_EXPORT __declspec(dllexport)
#ifdef WIN32
#ifndef DLL_EXPORT_API
#define DLL_EXPORT DLL_IMPORT
#else
#define DLL_EXPORT DLL_EXPORT
#endif
#else
#define DLL_EXPORT
#endif
#define DLL_STD_FUN extern "C" DLL_EXPORT
然后有一个DLL工程 如test
在工程的属性中预定义了 DLL_ERPORT_API
在test.h文件中定义一个函数(包含公共的头文件)
DLL_STD_FUN void function();
test.cpp
void function()
{...}
编译生成test.dll、test.lib
新建一个DLL工程test2
在test2.h头文件中包含:公共头文件
在工程的属性中预定义了 DLL_ERPORT_API
//test2.h:
DLL_EPPROT_API void function2();
//test2.cpp
#param(lib,"test1.lib");
void function2()
{
function();
}
编译生成test2.dll、test2.lib
然后在另一个工程中调用test2.dll中的函数function2时,函数里的function执行失败
检查后发现是共用一个宏的原因(DLL_EPORT_API)
在test2中 functiona()被解析成导出函数了
#ifdef WIN32
#ifndef DLL_EXPORT_API
#define DLL_EXPORT DLL_IMPORT
#else
#define DLL_EXPORT DLL_EXPORT
#endif
#else
#define DLL_EXPORT
#endif
#define DLL_STD_FUN extern "C" DLL_EXPORT
因为在test2的工程中设置了预定义DLL_EXPORT_API
解决方法:
在test2工程中去掉预定义DLL_EXPORT_DLL
test2.h文件不变,在test2.cpp文件中加入
#ifndef DLL_EXPORT_DLL
#define DLL_EXPORT_DLL
#endif
这样调用test2.dll的函数function2时,test.dll的function就能被正确地解析成导入函数了
- Dll嵌套调用
- Dll嵌套调用
- DLL嵌套调用的搜索路径
- 关于DLL嵌套封装及调用
- dll调用
- 调用DLL
- 调用DLL
- DLL调用
- DLL调用
- dll调用
- 调用DLL
- 调用dll
- 调用dll
- DLL调用
- dll调用
- Dll调用
- .dll调用
- 释放DLL 调用DLL
- 关系数据库已经统治数据存储30 多年
- 去掉ubuntu 桌面分区的图标
- Window Mobile中Panel上绘图的闪烁消除方法
- TTCN3新执行器系列-序
- 设计一个通用的makefile
- Dll嵌套调用
- 结构体的实现机制
- STEPS to Success – Day 2
- 字符编码笔记:ASCII,Unicode和 UTF-8
- 转:XP下使用IIS访问asp出现无权查看网页问题的解决办法
- spring的ApplicationContext 得到方式
- MyEclipse中jstl的使用
- If条件分支语句的实现机制
- 献给毕业的大学生