none
为何要给__declspec(dllexport)之类的加个预编译名 RRS feed

  • 问题

  •   我见很多库都喜欢类似这样定义:

    #ifdef DLL_EXPORT
    
    #define FUN_EXPORT __declspec(dllexport)
    
    #else 
    
    #define FUN_EXPORT __declspec(dllimport)
    
    #endif
    

        然后把DLL_EXPORT作为一个预编译处理器。我总怀疑这个是不是多此一举,既然你要导出的,直接使用__declspec(dllexport)不就行了吗?何必搞那么多呢?我想到的唯一好处可能是代码移植,就是假如将windows代码移植到linux上,而linux上的导出关键字不是__declspec(dllexport)。到底是不是这个原因呢?

     

     


    前无古人,后无来者
    2009年12月10日 3:38

答案

  • 不是.
    DLL_EXPORT_XXXXXX一般DLL都会定义这个宏,那么内部使用的就是__declspec(dllexport)
    在其他的项目引入该DLL的时候可以直接使用其头文件而不用修改代码(因为没有宏定义所以自动变为__declspec(dllimport))
    0xBAADF00D
    2009年12月10日 9:15
    版主

全部回复

  • 不是.
    DLL_EXPORT_XXXXXX一般DLL都会定义这个宏,那么内部使用的就是__declspec(dllexport)
    在其他的项目引入该DLL的时候可以直接使用其头文件而不用修改代码(因为没有宏定义所以自动变为__declspec(dllimport))
    0xBAADF00D
    2009年12月10日 9:15
    版主
  • 目的是为了同一个 .h 文件,不需要修改,
    即可既用来作为“编译 dll 使用的 .h 头文件”,
    也可用来作为外部程序引入所使用的头文件。

    否则,你发布给别人使用的时候,还得另外写一个 import 的头文件
    2009年12月14日 7:12