4

我在 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 吗?

4

2 回答 2

5

如果其他人搜索这个,问题很可能是

#define WIN32_LEAN_AND_MEAN

#include <windows.h>

删除定义,确保您包含 windows.h,并且应该为您定义接口关键字

于 2014-04-02T02:15:56.117 回答
1

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

#define __STRUCT__ struct
#define interface __STRUCT__

由于<objbase.h>包含在多个其他头文件中 - 例如 ole2.h、oleauto.h 和大量 ATL 头文件 - 当当前编译单元中没有包含这些头文件时,您可能会对这个错误感到惊讶。

于 2014-07-31T02:33:26.147 回答