Как заставить компилятор MIDL использовать «режим C ++»? вместо «режима C» в Visual Studio 2010?

Моя проблема проста, но я не знаю, как ее решить: у меня есть проект Visual Studio 2010 с файлами idl для создания библиотеки типов COM. Этот проект был изначально создан 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 ++»?

3

Решение

Не должно ли это

#include "MyProjectDcomSchnittstellenTypdefinitionen.idl"
#include "IObj1ManagerMyProject.idl"#include "IObj1ManagerMyProjectEvents.idl"
#include "IObj2Manager.idl"#include "IObj2NotifySink.idl"

на самом деле это

import "MyProjectDcomSchnittstellenTypdefinitionen.idl"
import "IObj1ManagerMyProject.idl"import "IObj1ManagerMyProjectEvents.idl"
import "IObj2Manager.idl"import "IObj2NotifySink.idl"

Хорошо … как насчет этот один здесь:

Эта страница относится только к разработчикам, у которых есть конкретные причины для замены препроцессора Microsoft C / C ++ в качестве препроцессора, используемого MIDL, или к разработчикам, которые должны указать настраиваемые переключатели препроцессора. Переключатели MIDL / cpp_cmd, / cpp_opt и / no_cpp используются для переопределения поведения компилятора по умолчанию. Как правило, нет причин для замены препроцессора Microsoft C / C ++ или указания настраиваемых переключателей препроцессора.

Компилятор MIDL использует препроцессор C во время начальной обработки файла IDL. Среда сборки, используемая при компиляции файлов IDL, связана с препроцессором C / C ++ по умолчанию. Если должен использоваться другой препроцессор, переключатель компилятора MIDL / cpp_cmd включает переопределение имени препроцессора C / C ++ по умолчанию:

midl /cpp_cmd preprocessor_name filename
1

Другие решения

Во включаемом файле MyProjectGlobaleDefinitionen.h был включенный подарок. Мне оставалось только удалить это включение, потому что оно вообще не было нужно.

0

По вопросам рекламы [email protected]