zoukankan      html  css  js  c++  java
  • 通过宏定义将__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等,都是通过这个实现的。当然,他们也是通过预编译宏实现跨平台的。

  • 相关阅读:
    好久没更新
    基于slick grid做infinite scroll(2)
    基于slick grid做infinite scroll(1)
    用REST访问ALM的Servlet
    Angularjs中provider,factory和service的不同
    粗糙版斗破苍穹网络阅读器
    将斗破苍穹按章分隔
    实战第一个云程序
    js变量提升
    Thread
  • 原文地址:https://www.cnblogs.com/JMLiu/p/8343607.html
Copyright © 2011-2022 走看看