3

私の問題は単純ですが、解決方法がわかりません。COM タイプ ライブラリを生成するための idl ファイルを含む Visual Studio 2010 プロジェクトがあります。このプロジェクトは、もともと 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++ セクションはプロジェクト プロパティ ページで使用できません。欠落しているセクションを利用可能にし、C++コンパイラをデフォルトにできるようにするために、dummy.cppファイルを追加しようとしました。

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++ モード" でコンパイラ/プリプロセッサを強制的に呼び出すにはどうすればよいですか?

4

2 に答える 2

0

インクルード ファイルMyProjectGlobaleDefinitionen.hには、インクルードが存在していました。このインクルードはまったく必要ないため、削除するだけで済みました。

于 2013-04-11T12:13:15.733 に答える