DLL 链接不一致

Evi*_*ebl 5 dll linker warnings

我收到几个警告,说我的 dll 链接不一致,尽管我像这样对 dll 的标头进行了分类:

#ifdef MY_ENGINE_EXPORTS
#define ENGINE __declspec(dllexport)
#else
#define ENGINE __declspec(dllimport)
#endif
Run Code Online (Sandbox Code Playgroud)

当我将 MY_ENGINE_EXPORTS 添加到预处理器定义中时,它可以很好地消除错误,但我的印象是这应该在构建/导出时自动完成。我措辞错误吗?我添加了下划线,因为该项目只有两个词,例如“我的引擎”。我已经尝试过将其作为 MY_ENGINE_EXPORTS 和 MYENGINE_EXPORTS 但似乎都不起作用。

正如我所说,我可以将它添加到预处理器定义中,但它让我烦恼为什么它没有按应有的方式运行。

Han*_*ant 4

我认为这是环境为 dll 项目创建的预定义宏

是的,当您使用 Win32 项目模板启动 DLL 项目时,确实会发生这种情况。该向导将自动为您添加 PROJECTNAME_EXPORTS 预处理器定义。

问题是它不能在符号中使用空格,因此不能使用“MY PROJECT_EXPORTS”。它将删除空间并将其设为 MYPROJECT_EXPORTS。这与您使用的 MY_PROJECT_EXPORTS 不匹配。当然,没有什么是快速编辑+替换无法解决的。

  • 我认为,如果每个人都停止使用“空项目”选项,那么有关 MSVC 的所有问题的一半都会消失。不知道它有什么魅力。 (2认同)