VS6 zu VS2010 ATL Phantomschmerzen - " ATL requires C++ compilation"
-
Ich habe die ruhmreiche Aufgabe, ein kollossales Visual Studio 6.0 MFC Projekt aus dem Jahre 300 vor Christus nach Visual Studio 2010 zu portieren. Nun wo ich nach gefühlten drei Jahren Portierungsgerfrickel (fast) alles durchkompiliert kriege, steht mir noch dieser seltsame ATL Fehler im Wege:
VS2010 meint nämlichATL requires C++ compilation (use a .cpp suffix)...was etwas verwirrend ist, denn das Projekt wird ausdrücklich als "C++ Code" kompiliert. Nach etwas Rumgesuche in den ATL Headern finde ich dann auch die Stelle, die den Fehler auswirft (atlbase.h):
#ifndef __cplusplus #error ATL requires C++ compilation (use a .cpp suffix) #endifMein erster Gedanke war nun, das dieses Projekt ".c" Dateien enthält die irgendwie das ATL Zeug referenzieren - Es gibt aber nicht eine einzige .c Datei im Source und jedes .cpp das ATL Kram verwendet ist reinstes C++/MFC und ATL Header werden auch nur in diesen .cpp included. Wo liegt hier der Fehler?

-
Ich hätte ja an precompiled headers gedacht, aber wenn du nicht eine einzige .c-Datei hast, weiß ich auch nicht.
Vielleicht kannst du die .cpp-Datei, bei deren Übersetzung das Problem auftritt, mal mit dem Präprozessor vorbehandeln? (cf. /E- und /P-Switches für cl.exe)
-
Der Fehler ist, dass
__cplusplusmicht definiert ist.
-
knivil schrieb:
Der Fehler ist, dass
__cplusplusmicht definiert ist.
Ja, aber wie ist das möglich?

-
Beispielsweise durch
#undef __cplusplus.
-
Die einfachen Sachen probiere ich schon aus, bevor ich hier was poste

-
Die Meldung wird ja beim Übersetzen einer (oder mehrerer?) Sourcen kommen, in der der besagte Header eingebunden ist (direkt oder indirekt, wurscht...)
- Schau dir die Kommandozeile für die betroffene Source an, vielleicht fällt da ja was auf.
- Poste etwa folgendes vor die erste Zeile der Source und nach jeden #include:
#ifndef __cplusplus #error __cplusplus war nie definiert, irgendwas laeuft hier komplett schief! #endif #include "header1.h" #ifndef __cplusplus #error header1.h hats kaputt gemacht! #endif #include "header2.h" #ifndef __cplusplus #error header2.h hats kaputt gemacht! #endif // ...-> finde so nach und nach den/die Übeltäter

-
Er wirft mir leider nur den ATL Header als Quelle aus und der wird über atlbase.h included, welcher wiederum über die stdafx.h included wird und die findet sich in einem MFC Projekt ja so ziemlich überall. Ich muss irgendwo einen Moment erwischen, in dem __cplusplus undefiniert ist und einer dieser Header eingebunden wird - Da __cplusplus meines Wissens per Standard definiert ist und keinen bestimmten Header erfordert und es im ganzen Projekt kein "#undef _cplusplus" oder sowas / und wie gesagt auch keine ".c" Datei gibt, ist das schon etwas mysteriös. Das Projekt ist zudem explizit auf "C++ Code" eingestellt. Das einzige was ich finden kann, sind ein Paar Stellen die mit "extern C" gekennzeichnet sind, welche aber alle sauber geklammert sind.
-
Übersetze mal diese eine Datei mit "/P" (in den Projekteinstellungen *dieser Datei* unter "Advanced" angeben und dann diese Datei compilieren (Ctrl-F7) und dann in dem Debug-Verzeichnis die entsprechende *.i-Datei anschauen. Dann siehst Du was wirklich gemacht wurde und findest den Fehler ganz leicht...