我生成从C ++代码在Visual的DLL。 依赖步行者看到导出作为C功能3层的功能。
我做了一个项目使用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
谢谢。
是什么使看作是一个或C ++函数的函数,而不需要修改代码?
由C ++编译器编译的函数自动成为“C ++ - 功能”和名字的mangling发生解决C ++的功能,如命名空间和过载。 为了得到“C”的出口名称,必须使用上述extern "C"
函数声明预选赛。 可替代地一个巨大extern "C" { .. }
方框围绕含有原型的标题。
如果这不能解决您的问题,它可能涉及到的DllImport / DLLEXPORT。 如果你#define AM_LIB_EXPORT __declspec(dllexport)
在您的DLL构建,您通常还需要使它dllimport
的应用,以便链接对你的DLL链接器知道在哪里符号从取。
这是一个名字改编的问题? 如果你不使用extern "C"
在你的函数声明,他们将得到名称错位。
我找到了原因:
出口也被加入作为其它附加命令行选项(/出口)。 在这种情况下,它被导出为C函数。 我不明白为什么...
我删除该其它附加命令行开关。
谢谢你们。
我仍然不知道如何用标记线为“解决”?