我的问题很简单,但我不知道如何解决:我有一个 Visual Studio 2010 项目,其中包含用于生成 COM 类型库的 idl 文件。该项目最初由 VC++ 6.0 创建。VC 6.0 可以编译这个项目而没有任何错误。但我最近对其进行了转换并继续尝试在 VC 2010 中对其进行编译。我总是收到以下控制台输出消息:
1>------ Build started: Project: myProject, Configuration: Debug Win32 ------
1>Build started 08.04.2013 11:23:12.
1>InitializeBuildStatus:
1> Touching ".\Debug\myProject.unsuccessfulbuild".
1>Midl:
1> Processing .\myFile.idl
1> myProject.idl
1>C:\Programme\Microsoft Visual Studio 10.0\VC\include\typeinfo(29): fatal error C1189: #error : This header requires a C++ compiler ...
1>
1>midl : command line error MIDL1003: error returned by the C preprocessor (2)
1>
1>Build FAILED.
我已经发现这仅意味着 MIDL 在“C 模式”中调用编译器,而不是在“C++ 模式”中。该项目既不包含 .c 也不包含 .cpp,只有 .h 和 .idl 文件:C/C++ 部分在项目属性页中不可用。我尝试添加一个 dummy.cpp 文件,以使缺少的部分可用并能够在其中默认 C++ 编译器。
Midl 文件如下所示:
import "unknwn.idl";
//Globale Definitionen
#include "MyProjectGlobaleDefinitionen.h"
//Interfacedeklarationen
interface IMyProjectDcomSchnittstellen;
[
uuid(E6C14CB3-CFFE-11d4-B1A2-00104BC1A971),
helpstring(MyProject_SCHNITTSTELLE_RELEASE_2_HELPSTRING),
version (MyProject_SCHNITTSTELLE_VERSIONSNUMMER)
]
library MyProject_SCHNITTSTELLE_KURZBEZEICHNER
{
importlib("..\\..\\..\\Files\\DLL\\stdole32.tlb");
importlib("..\\..\\..\\Files\\DLL\\MSADO15.dll");
// #include "..\..\common\Hresult_Werte.h"
#include "MyProjectDcomSchnittstellenTypdefinitionen.idl"
#include "IObj1ManagerMyProject.idl"
#include "IObj1ManagerMyProjectEvents.idl"
#include "IObj2Manager.idl"
#include "IObj2NotifySink.idl"
//************ Obj2Manager **************************
[uuid(F0284CF2-8E24-11d4-8941-006097AA387A)]
coclass Obj2Manager
{
[default] interface IObj2Manager;
[default, source] interface IObj2NotifySinkEvents;
}
//************ Obj1ManagerMyProject ************************
[uuid(E6C14CB2-CFFE-11d4-B1A2-00104BC1A971)]
coclass Obj1ManagerMyProject
{
[default] interface IObj1ManagerMyProject;
[default, source] interface IObj1ManagerMyProjectEvents;
}
}; //Ende library Obj1_myProject
如何强制 MIDL 在“C++ 模式”下调用编译器/预处理器?