代码之家  ›  专栏  ›  技术社区  ›  Zitrax dudico

是CPP文件中需要的

  •  10
  • Zitrax dudico  · 技术社区  · 16 年前

    可能是一个简单的问题,但我只有Linux来测试不需要使用declspec(dllexport)的代码。在当前代码中,declspec(dllexport)位于.h文件中所有文件的前面,但仅位于cpp文件中大约50%的函数的前面,因此我想知道cpp文件中是否真的需要这些函数?

    3 回复  |  直到 16 年前
        1
  •  12
  •   Darian Lewin    11 年前

    不,它只需要在标题中。

    这里有一个 link 更多信息。

    我经常看到一个宏定义

    #if defined(MODULENAME_IMPORT)
    #define EXPORTED __declspec(dllimport)
    #elif defined(MODULENAME_EXPORT)
    #define EXPORTED __declspec(dllexport)
    #endif
    

    然后在你的头上

    void EXPORTED foo();
    

    在执行导入/导出的项目的项目设置中相应地设置定义。

        2
  •  5
  •   Vinay    16 年前

    不,CPP文件中不需要。只有在声明中才需要。

    例如,如果我有一个类cmyclass。如果我想把这个出口,H会有

    h服务器代码

    _ declspec(dllexport)cmyclass { };

    在客户端代码中,即使用这个类的代码中,您必须将类声明为

    客户端代码

    _ declspec(dllimport)cmyclass;

    //使用类的代码

        3
  •  2
  •   Ketan    16 年前

    您也可以在.cpp文件中使用,当您已经模板化了代码并且正在.cpp文件中实例化时,则需要在实例化时导出定义。但即使在这种情况下,我也看到了在.h中做同样有效。在Windows上,您可以使用dumpbin.exe/exports*.dll查看导出的签名,Linux中也有类似的实用程序。这将使您了解如何导出签名。