DLL:导出为C / C ++函数?

时间:2010-01-19 15:08:48

标签: c++ visual-c++ dllexport

我使用C ++代码在Visual中生成了一个DLL。 Dependency Walker将3个函数导出为C函数。

我做了一个SCons项目来生成DLL,并且3个函数中的2个不被视为C函数。

什么使函数看作是一个或C ++函数,而不修改代码?它必须在编译/链接选项中,但我没有找到任何相关的东西。

该函数以宏为前缀:AM_LIB_EXPORT

在.h中,我有:

#ifdef _WIN32
#define AM_LIB_EXPORT __declspec(dllexport)
#else
#define AM_LIB_EXPORT
#endif // _WIN32

感谢。

3 个答案:

答案 0 :(得分:3)

这是一个名称错位问题吗?如果你不在函数声明周围使用extern "C",它们将被命名为。

答案 1 :(得分:3)

  

什么使函数看作是一个或C ++函数,而不修改代码?

由C ++编译器编译的函数自动成为“C ++ - 函数”,并且会发生名称修改以解析名称空间和重载等C ++特性。 为了获得'C'导出名称,必须在函数声明中使用前面提到的extern "C"限定符。或者,在包含原型的标题周围有一个巨大的extern "C" { .. }块。

如果这不能解决您的问题,可能与dllimport / dllexport有关。如果您在DLL构建中#define AM_LIB_EXPORT __declspec(dllexport),则通常还需要为链接到DLL的应用程序设置dllimport,以便链接器知道从哪里获取符号。

答案 2 :(得分:0)

我找到了原因:

导出也被添加为附加命令行选项(/ EXPORT)。在这种情况下,它将导出为C函数。我不明白为什么......

我删除了这个额外的命令行开关。

谢谢大家。

我仍然不知道如何将一个帖子标记为“已解决”?