Dll嵌套调用

问题描述:

有一个公共的头文件里面有这么一段描述

 

#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就能被正确地解析成导入函数了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值