WIN32_LEAN_AND_MEAN mal definiert und mal nicht...



  • Hallo liebe API-Experten,

    in einer Anwendung die ich geschrieben habe, war möglicherweise das Makro WIN32_LEAN_AND_MEAN mal definiert und mal undefinert (siehe meinen Thread hier). Ich arbeite mit dem Borland C++ Builder 3 (bitte keine Kommentare dazu, ich hab' mir das nicht ausgesucht :p ). Das Makro soll, soweit ich das richtig verstanden habe, mit dafür verantwortlich sein dass nicht benötigte Header nicht ins Projekt mit eingebunden werden (Optimierung). Meine Frage dazu:

    Kann es passieren, dass ein Makro mal definiert ist und mal nicht? Wenn ja, wie kann das passieren und wie umgeht man das?

    MfG



  • Mir fällt nur der explizite Weg über #undef ein. Damit kann man einmal definierte Konstanten/Makros wieder "löschen". Aber das Makros einfach so verschwinden, wird wohl nicht passieren.

    http://msdn.microsoft.com/de-de/library/ts4w8783.aspx



  • _matze schrieb:

    ... das Makros einfach so verschwinden, wird wohl nicht passieren.

    Bloss wie kann denn sonst noch so ein Problem entstehen (siehe Link zum alten Thread)???



  • Naja, wenn es in einer von Dir definierten Header-Datei definiert wird, und diese nur einige Cpp-Dateien inkludieren, ist das Makro natürlich auch nur in diesen definiert. Wenn Du es nicht komplett über die IDE regelst.



  • Von Hand mache ich garnix mit dem Makro. Und das Problem sah ja so aus:

    Ich habe ShellExecute() in meiner Anwendung im Hauptprogramm genutzt. Das Programm lies sich compilieren und starten und der Teil mit ShellExecute() lies sich auch fehlerfrei ausführen. Wenn ich allerdings das Programm unter "Projekt->Optionen->Compiler" zwischen "Voll debuggen" und "Endgültige VErsion" umgeschalten habe, kannte der BCB beim Compilieren plötzlich die Funktion ShellExecute() nicht mehr, WELCHE 1 SEKUNDE VORHER NOCH FUNKTIONIERTE!!! Wenn ich die Funktion dann auskommentiert, die Anwendung so compiliert und dann die Funktion wieder dazugenommen habe, lies die Anwendung sich wieder fehlerfrei compilieren... Und dieses Verhalten zeigte sich jedes Mal, wenn ich besagte Einstellung in den Projektoptionen vorgenommen habe. Gelöst konnte das Ganze durch Einbinden der shellapi.h werden. Schon merkwürdig, oder?

    Edit: Oder anders gesagt: ShellExecute wird in shellapi.h definiert. Also war shellapi.h mal automatisch mit eingebunden und nach dem Umstellen besagter Projektoption nichtmehr automatisch mit eingebunden... wie kann das sein? Die Idee war halt, dass ein Makro (zB. WIN32_LEAN_AND_MEAN) mal definiert ist und mal nicht - warum auch immer.



  • Schon mal daran gedacht, dass das an den Projekteinstellungen für die einzelnen Buildpfade liegen könnte und weniger an den Headern des Platform SDKs?



  • Im Klartext: Wenn du ein Makro in den Projekteinstellungen für die Debug-Version definierst, wird das nicht automatisch auch für duie Release-Version übernommen. Das gilt schließlich für alle Projekteinstellungen, wie z.B. auch hinzugelinkte Libs, ausführbare Dateien für Debug-Sessions, precompiled Header, ... (zumindest beim VS)



  • _matze schrieb:

    Wenn du ein Makro in den Projekteinstellungen für die Debug-Version definierst, wird das nicht automatisch auch für die Release-Version übernommen. Das gilt schließlich für alle Projekteinstellungen, wie z.B. auch ... precompiled Header, ... (zumindest beim VS)

    Mit diesem Ansatz werde ich mal weitersuchen.


Anmelden zum Antworten