通过宏定义将__declspec(dllexport)与__declspec(dllimport)的转化,实现库代码和使用代码使用同一份头文件...

我们知道,在VC编程中,如果要编译成动态链接库,需要将函数、变量、类等导出,这时使用__declspec(dllexport)。使用动态链接库时,需要在声明的时候有使用__declspec(dllimport)导入外部符号。这样,在库的编写时需要使用一份带__declspec(dllexport)的头文件,而在使用库时,又要使用另一份带__declspec(dllimport)的头文件,有没有什么办法实现编写库和使用库都只使用同一份头文件呢?这时候,预定义宏有帮了大忙了。

解决办法:使用条件编译:定义一个变量,针对提供者和使用者,设置不同的预编译值。

 1 #ifndef DLL_H_
 2 #define DLL_H_
 3 
 4 #ifdef DLLProvider
 5 #define DLL_EXPORT_IMPORT __declspec(dllexport)
 6 #else
 7 #define DLL_EXPORT_IMPORT __declspec(dllimport)
 8 #endif
 9 
10 DLL_EXPORT_IMPORT int add(int ,int);
11 
12 #endif

很多库如OpenCV等,都是通过这个实现的。当然,他们也是通过预编译宏实现跨平台的。

转载于:https://www.cnblogs.com/JMLiu/p/8343607.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值