VISTA & precompiler
-
Gibt es eine Möglichkeit, folgenden Pseudocode auszuführen
#ifdef VISTA
....
#endifPs. Ich weiß, dass man das Betriebssystem ermitteln kann, aber wenn ich den Precompiler nutze, ist das ja etwas, was vor jedem Funktionsaufruf liegt.
-
Was willst Du mit so etwas bezwecken? Soll das Programm mal für Vista und mal für nicht Vista Platformen kompiliert werden, oder möchtest Du Code je nach OS ausführen?
Preprozessor Code wird gar nicht ausgefüht, er wird vor dem Compiler interpretiert.
Dadurch erhälst Du keinen dynamischen Code! Dazu müsstest Du GetVersionEx verwenden:
http://msdn.microsoft.com/en-us/library/ms724451(VS.85).aspxWenn Du Platformen für das SDK definieren willst, musst Du die entsprechenden #defines verwenden, wie z.B. NTDDI_VERSION
Siehe MSDN
Using the Windows Headers (Windows)
http://msdn.microsoft.com/en-us/library/aa383745(VS.85).aspx
-
1. heißt es "preprocessor" und nicht "precompiler"
2. das Stück Code ist kein ausführbarer Code, sondern paar Anweisungen für ein Textersetzungswerkzeug
3. ist nicht klar, was du denn willst
-
ja, es ist der Präprozessor - danke für den Hiweis.
Der Hintergrund ist simpel: Auf dem einen OS (2000) läuft eine bestimmte dll - 2embed.ll - nicht, resp. erzeugt Fehlermeldungen, die den Programmablauf empfindlich stören, auf Vista hingegen läuft das Ganze tadellos.Folglich möchte ich den Bereich, der auf die entsprechende Biblioteh vereweist, einkapseln.
Allerdings muss ich dies dem Präproessor mitteilen, ansonsten bekomme ich auf Windows 2000 eine Fehlermeldung, resp. das Programm startet erst gar nicht richtig.
-
Wieso dem Preprozessor??? Der wird doch gar nicht ausgewertet, wenn die Anwendung schon erzeugt wurde!
Verwende die Methode entweder über "/Delayload" oder via LoadLibrary/GetprocAddress!
-
Hol dir zur Laufzweit per GetVersionEx die Windowsversion und entscheide dann welche Funktion ausgeführt werden soll, so kannst du einen *.exe OS unabhängig einsetzten. Per LoadLibrary/GetprocAddress kannst du dann auch Funktionen programmmieren die es für das entsprechende OS gar nicht gibt. Diese Funktionen werden dann nur ausgeführt wenn das OS die Funktionen auch enthält. Ich verwende z.B. AddFontMemResourceEx und AddFontResource wobei AddFontResource auf Win9x Systemen und AddFontMemResourceEx auf Win2k und höher ausgeführt wird. Ich benötigt so nur eine *.exe um ab Win9x alle Microsoft OS abzudecken. Warscheinlich ist LoadLibrary/GetprocAddress aber keine gute Wahl, wenn du diese Aufrufe in einer Schleife ausführst. Ich kann mir vorstellen, daß es dann zu Performance Einbusen kommt.