In Visual Studio 2008, ist es ein makro zu identifizieren, die eine 64-bit-Windows-OS?
Hier ist das problem:
Um #importieren Sie die richtige version von ADO für mein 32-bit-Programm, ich muss wissen, ob ich kompiliere auf einem 32-bit-Windows-Betriebssystem (also die Datei im Programm-Dateien) oder eine 64-bit-Betriebssystem (also die Datei in " Programme (x86)). Aber ich kann nicht finden, ein makro, das mir sagt, oder auch nur ein makro, das mir sagt, dass der Prozessor 64-bit.
Wenn ich testen Sie es auf 64-bit-windows 7 mit Visual Studio 2008 Express, den folgenden einschlägigen Makros sind definiert:
_M_IX86
X86
Aber keiner von den *64 Makros angezeigt, die definiert werden, was wahrscheinlich auch der Fall wäre, wenn Sie beziehen sich auf /target/Architekturen und nicht die aktuelle Maschine-Architektur.
Ist es ein Präprozessor-makro, das mir sagen ob ich mit einer 64-bit-Windows-OS?
Und wenn ja, was ist es? Ich würde sogar rechnen für eine, die mir sagen, ob ich mit einem 64-bit-Prozessor.
(p.s. Ich bin mir schon bewusst,diese Liste)
Update
So weit, die Leute scheinen zu denken, dass es kein solches makro, und kopieren Sie die DLLs oder mit Hilfe von Umgebungsvariablen ist eine bessere Sache zu tun.
Also nehmen Sie die Umgebungsvariable Hinweis, ich habe gearbeitet, um das problem für die Entwickler, indem Sie beide Ordner -- Program Files (x86) und Program Files -- auf die include-Pfads und Verwendung der Winkel-Klammer-syntax von #import. Allerdings vermute ich, dass ich brauchen, um zu bauen release-Versionen für jede version des OS, da das ADO-DLLs sind nun Teil des Betriebssystems und nicht verteilbaren. Blick in das.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin mir nicht bewusst ein makro, aber Sie können die Umgebungsvariable PROCESSOR_ARCHITECTURE. Hinweis: Sie können den Zugriff auf environment-Variablen aus visual studio-Einstellungen-Dialogfelder mit Hilfe des $(PROCESSOR_ARCHITECTURE) - notation.
Auch ein workaround für deinen Fall wäre eine Umgebungsvariable definieren, wie ADO_LIB_DIR, stellen Sie den korrekten Programm-Dateien-Verzeichnis, und importieren Sie dann die lib oder fügen Sie eine include-Verzeichnis mit eine notation verwendet, die die $(ADO_LIB_DIR) variable. So alle Sie tun müssen, wenn Sie kompilieren auf eine neue Maschine setzen Sie die Umgebungsvariable.
Update: ich sehe, gibt es auch $(ProgramFiles) und $(ProgramFiles(x86)) - Umgebungsvariablen, so dass Ihre beste Wette ist wahrscheinlich, Sie zu benutzen.
Prüfen: _WIN64
Hier beschrieben:
http://msdn.microsoft.com/en-us/magazine/cc300794.aspx
Verwende ich diese und es funktioniert.
Ihre situation ist mehr Komplex, dass Sie wissen wollen, das OS eher als die Art der Zusammenstellung. Ich benutze Windows x64 die ganze Zeit, aber ich kompiliere sowohl 32-bit und 64-bit-Anwendungen. _WIN64 ist nur definiert, wenn ich kompilieren einer 64-bit Anwendung und nicht, wenn ich kompilieren von 32-bit-Anwendung, obwohl ich mich immer auf einem Windows x64-Maschine.
Ich denke, Sie sollten einfach Ihre include-Verzeichnisse anders zu verstecken diese Komplexität. Es ist gut anzunehmen, dass die include-Verzeichnisse werden sehr unterschiedlich auf verschiedenen Computern, so dass die Pfad-Erkennung Vollautomatische wahrscheinlich versucht zu schlau zu sein für Ihre eigenen gut auf die Dauer.
Ich hatte das gleiche problem, aber nicht nur mit ado, aber auch mit anderen Bibliotheken (ESRI). Also die Lösung war die folgende:
In der Projekt-Einstellung -> C/C++ -> Präprozessor -> "Preprocessor Definitions": Fügte folgenden text: COMPILATION_PLATFORM=$(PROCESSOR_ARCHITECTURE)
Und im code kann ich eine Entscheidung treffen, nur ein Beispiel wie es funktioniert:
Ich hoffe es konnte dir helfen.
Marek