2013-03-12 48 views
4

即时得到一些警告说我有不一致的dll的联系,尽管我我的dll像这样的标题进行分类:不一致的DLL联动

#ifdef MY_ENGINE_EXPORTS 
#define ENGINE __declspec(dllexport) 
#else 
#define ENGINE __declspec(dllimport) 
#endif 

它当我添加MY_ENGINE_EXPORTS到预处理工作正常,摆脱错误的的定义,但我的印象是这应该在构建/导出时自动完成。我说错了吗?我包含一个下划线,因为该项目是2个字,例如“我的引擎”。我试过它既是MY_ENGINE_EXPORTS也是MYENGINE_EXPORTS,但都不起作用。

正如我所说,我可以将它添加到预处理器的定义,但它是在扰乱我为什么它不像它应该那样行事。

+1

如果您没有将它添加到预处理器定义中,那么您将明显地冒一些翻译单元意外定义的* not *有MY_ENGINE_EXPORTS#的风险。你也没有解释你是如何确定它是#defined。当然这解释了警告。 – 2013-03-13 00:05:19

+0

我意识到这个问题现在有多愚蠢,但是我看过的每个主题都有以{projectname} _EXPORTS相同格式编写的#ifdef。我认为这是一个预定义的宏,该环境为构建的dll项目创建。这很烦人,但我无法找到我之前看到的链接,甚至说它是自动的。 – EvilWeebl 2013-03-13 00:13:49

回答

3

我想这是一个预定义宏,对于DLL创建环境的项目

是的,当你使用Win32项目模板,以获得DLL项目启动,它发生。该向导将自动为您添加PROJECTNAME_EXPORTS预处理器定义。

皱纹是它不能在符号中使用空格,所以它不能使用“我的PROJECT_EXPORTS”。它会下降的空间,并使其MYPROJECT_EXPORTS。这与您使用的那个不匹配,MY_PROJECT_EXPORTS。没有什么快速的Edit + Replace当然不能修复。

+0

优秀的答案,谢谢。它没有为我创建预处理器定义的原因是因为我启动了一个空项目,然后将其更改为一个dll项目。 – EvilWeebl 2013-03-13 11:29:42

+2

我认为如果每个人都停止使用“空项目”选项,那么关于MSVC的所有SO问题中有一半就会消失。不知道什么是如此有吸引力。 – 2013-03-13 11:55:09