Benutzer mit den meisten Antworten
Macro für Präprozessor-Direktive für die Unterscheidung der Plattformen der IDE (nicht _WIN64 oder x64)

Frage
-
Hallo,
gibt es ein Macro, welches dem Präprozessor die Unterscheidung der Plattformen erleichtert, auf der Visual Studio 2008 gerade läuft?
In einem Projekt ziehe ich mit #import bestimmte DLLs in eine Quelle ein. Das Projekt wird auf verschiedenen Rechnern (Windows 7 32 bit und Windows 7 64 bit kompiliert. Unter Windows 32 Bit befinden sich die DLLs jedoch woanders als unter Windows 64 Bit (anderes Verzeichnis: /programme (x86)).
//#ifdef _WIN64 // _M_X64 // x64 #ifdef _UNDER_WIN64_ //#define _MS_OFFICE_VER_11_64_ 1 #define _MS_OFFICE_VER_12_64_ 1 #else //#define _MS_OFFICE_VER_11_32_ 1 #define _MS_OFFICE_VER_12_32_ 1 #endif
Nun möchte ich nicht nur die Zielplattform ändern. Die Definitionen _WIN64, _M_X64, x64 ändern nur die Zielplattformen und Prozessoren.
Wie erkennt Visual Studio 2008 das zugrundeliegende Betriebssystem der Entwicklungsumgebung?
Die Definition _UNDER_WIN64_ habe ich bisher in die Projektdatei eingefügt, aber die muss ich ständig löschen und wieder einfügen, nachdem das Projekt auf einen anderen Rechner kopiert wurde um dort im Debug-Modus getestet zu werden.
Danke
Jens
Antworten
-
Ich rate Dir zu:
Erstelle einmal die nötigen Import-Dateien auf einem Rechner Deiner wahl und binde diese erstellen Dateien direkt in Dein Projekt ein und kommentiere dann die "#import" Direktiven aus!!!!
Nur so kannst Du auf allen Entwicklungs-Rechnern alles kompilieren und Du weisst auch ganz genau, WELCHE Version der DLLs Du verwendet hast.
Nur so bekommst Du einen gleichen Build auf allen Entwicklungsrechnern!
Jochen Kalmbach (MVP VC++)- Als Antwort markiert JenserB Mittwoch, 21. Juli 2010 11:40
-
@Jochen: 100% ACK
Siehe auch:
http://blog.m-ri.de/index.php/2008/08/03/tipps-tricks-import-durch-include-ersetzen/
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de- Als Antwort markiert JenserB Mittwoch, 21. Juli 2010 11:40
Alle Antworten
-
Hallo JenserB!
Wie erkennt Visual Studio 2008 das zugrundeliegende Betriebssystem der Entwicklungsumgebung?
Warum willst Du das wissen?
VS wird immer im x86 Mode ausgeführt, somit greift auch die File-System-Redirection...WAS hast Du denn GENAU für ein Problem? Zeig doch mal was...
Jochen Kalmbach (MVP VC++) -
Hallo Jochen,
>> zeigt doch mal...
Ja gern:
//#ifdef _WIN64 // _M_X64 // x64 #ifdef _UNDER_WIN64_ //#define _MS_OFFICE_VER_11_64_ 1 #define _MS_OFFICE_VER_12_64_ 1 #else //#define _MS_OFFICE_VER_11_32_ 1 #define _MS_OFFICE_VER_12_32_ 1 #endif #ifdef _MS_OFFICE_VER_11_32_ // For Office 2003 unter Win32 #import "C:\Programme\Gemeinsame Dateien\Microsoft Shared\OFFICE11\mso.dll" rename("RGB", "OL_RGB") #import "d:\Programme\Microsoft Office\OFFICE11\MSOUTL.OLB" rename("CopyFile", "OL_CopyFile") #define _MS_OOUTLOOK_AVAILABLE_ #endif #ifdef _MS_OFFICE_VER_12_32_ // For Office 2007 unter Win 32 bit #import "C:\Programme\Common Files\microsoft shared\OFFICE12\mso.dll" rename("RGB", "OL_RGB") #import "C:\Programme\Microsoft Office\Office12\MSOUTL.OLB" rename("CopyFile", "OL_CopyFile")// no_namespace exclude("_IRecipientControl", "_DRecipientControl") #define _MS_OOUTLOOK_AVAILABLE_ #endif #ifdef _MS_OFFICE_VER_11_64_ // For Office 2007 unter Win 64 bit #import "C:\Program Files (x86)\Common Files\microsoft shared\OFFICE11\mso.dll" rename("RGB", "OL_RGB") #import "C:\Program Files (x86)\Microsoft Office\Office11\MSOUTL.OLB"// no_namespace exclude("_IRecipientControl", "_DRecipientControl") #define _MS_OOUTLOOK_AVAILABLE_ #endif #ifdef _MS_OFFICE_VER_12_64_ // For Office 2007 unter Win 64 bit #import "C:\Program Files (x86)\Common Files\microsoft shared\OFFICE12\mso.dll" rename("RGB", "OL_RGB") #import "C:\Program Files (x86)\Microsoft Office\Office12\MSOUTL.OLB" rename("CopyFile", "OL_CopyFile")// no_namespace exclude("_IRecipientControl", "_DRecipientControl") #define _MS_OOUTLOOK_AVAILABLE_ #endif
Da diese Quelle auf verschiedenen Rechnern mit verschiedenen Betriebssystemen kompiliert wird, gibt es immer eine Fehlermeldung, weil die Importdatei z. B. mso.dll nicht gefunden wird. Denn sie befindet sich unter Windows 7 - 64 Bit unter Program files (x86) und unter Windows 7 - 32 bit unter program files.
Ich möchte das gesamte Projektimmer auf verschiedene Plattformen portieren und dort die neuesten Quellen kompilieren und testen.
Ist das jetzt besser?
Äm, File-System-Redirection, das klingt, als ob ich nur program files angeben mus oder funktionieren etwa die Umgebungsvariablen in der Präprozessor-Direktive? Das kann nicht sein, oder? Ok, ich teste.
Danke
Jens
-
Ich rate Dir zu:
Erstelle einmal die nötigen Import-Dateien auf einem Rechner Deiner wahl und binde diese erstellen Dateien direkt in Dein Projekt ein und kommentiere dann die "#import" Direktiven aus!!!!
Nur so kannst Du auf allen Entwicklungs-Rechnern alles kompilieren und Du weisst auch ganz genau, WELCHE Version der DLLs Du verwendet hast.
Nur so bekommst Du einen gleichen Build auf allen Entwicklungsrechnern!
Jochen Kalmbach (MVP VC++)- Als Antwort markiert JenserB Mittwoch, 21. Juli 2010 11:40
-
@Jochen: 100% ACK
Siehe auch:
http://blog.m-ri.de/index.php/2008/08/03/tipps-tricks-import-durch-include-ersetzen/
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de- Als Antwort markiert JenserB Mittwoch, 21. Juli 2010 11:40