在尝试编译.dll时,我收到了interface关键字的错误

时间:2013-08-18 11:03:37

标签: c++ visual-studio dll interface

我在Visual Studio中设置了一个项目来创建.dll。我在项目中包含了一个使用关键字“interface”的外部库。这给了我以下错误:

  

错误C2146:语法错误:缺少';'在标识符'INuiAudioBeam'之前

这些是发生错误的代码行:

#ifndef __INuiAudioBeam_FWD_DEFINED__
#define __INuiAudioBeam_FWD_DEFINED__
typedef interface INuiAudioBeam INuiAudioBeam; //Error on this line
#endif

上面的代码是我包含的外部库中头文件的一部分。在编译时,项目构建成功,没有任何错误,但不包括库的标题(注意:链接库不会导致任何问题)。

这是什么解决方案?是因为我有一个外部库我用来创建我的DLL?我应该创建.lib而不是dll吗?

2 个答案:

答案 0 :(得分:3)

如果其他人搜索此内容,问题很可能是

#define WIN32_LEAN_AND_MEAN

#include <windows.h>

删除define,确保包括windows.h,并且应该为你定义interface关键字

答案 1 :(得分:1)

您可以通过对interface关键字的起诉获得C2146。关于如何定义一个关键字可能会让人感到困惑,特别是在使用相同头文件的其他编译单元或项目中 - 包含导致问题的关键 - 一切顺利。但是,明显的关键字“interface”仍然是编译器#define指令。它恰好被隐藏在头文件中,少数开发人员有理由检查:<objbase.h>。它有两个步骤:

#define __STRUCT__ struct
#define interface __STRUCT__

由于<objbase.h>包含在多个其他头文件中 - 例如ole2.h,oleauto.h和一系列ATL标题 - 当这些标题中没有包含这些标题时,您可能会对此感到惊讶当前的编译单元。

相关问题