Richtiger Weg, um zu überprüfen, ob Windows zur Laufzeit 64 Bit oder nicht hat? (C ++)

7
%Vor%

Ich brauche das, damit meine App die Windows Registry-Funktionen richtig nutzen kann (oder brauche ich das?).

Also mache ich es richtig?

    
Newbie 26.01.2010, 16:06
quelle

4 Antworten

15

Hier ist, was Raymond Chen in seinem Blog unter Ссылка vorschlägt:

%Vor%     
Igor Korkhov 26.01.2010, 16:26
quelle
6

Nein, dies kann nicht als Laufzeitprüfung funktionieren , da sizeof(int*) zur Kompilierungszeit an dem Punkt festgelegt wird, an dem Sie Ihr Programm entweder als 32-Bit- oder als 64-Bit-Version kompilieren möchten und sobald sie kompiliert wurde, hat die Überprüfung das gleiche feste Ergebnis, unabhängig davon, auf welcher Plattform sie ausgeführt wird.

Da ein 64-Bit-Programm jedoch nicht auf einer 32-Bit-Plattform ausgeführt werden kann, werden Sie feststellen, dass Ihre Überprüfung korrekt als eine Kompilierungszeitprüfung ohne Änderung ausgeführt wird:

Wenn Sie Ihr Programm als 64-Bit kompilieren, verwendet Ihr Programm die 64-Bit-API aufgrund Ihres obigen Codes und wird auf einer 64-Bit-Version von Windows korrekt funktionieren. Es wird überhaupt nicht auf 32-Bit-Fenstern laufen, so dass es keine Chance gibt, dass Sie versehentlich die 64-Bit-API auf einer 32-Bit-Version von Windows verwenden.

%Vor%

Wenn Sie Ihr Programm im 32-Bit-Modus kompilieren, verwendet Ihr Programm korrekt die 32-Bit-APIs, die auf einer 64-Bit-Windows-Plattform im 32-Bit-Kompatibilitätsmodus funktionieren. Bit-Plattform.

%Vor%

Wenn Sie wirklich von einem 32-Bit-Programm auf 64-Bit-APIs zugreifen möchten, gibt es wahrscheinlich APIs, aber ich bin mir nicht sicher, ob Sie das wollen.

    
Alex Brown 26.01.2010 16:10
quelle
4

Außerdem kann man IsWow64Process verwenden, um zu überprüfen, ob Sie ' Re ein 32Bit Prozess ( sizeof(void*)==4 ) läuft unter der WoW64 Emulation auf einer 64bit Windows Maschine.

    
Alexander Gessler 26.01.2010 16:14
quelle
0

Hier ist ein anderer Weg: GetSystemWow64Directory - "Ruft den Pfad des von WOW64 verwendeten Systemverzeichnisses ab Dieses Verzeichnis ist unter 32-Bit-Windows nicht vorhanden. " und "Bei 32-Bit-Windows schlägt die Funktion immer fehl, und der erweiterte Fehler ist auf ERROR_CALL_NOT_IMPLEMENTED gesetzt." Über IsWow64Process Ich persönlich bin nicht sicher über die Verwendung von da in MSDN in der Beschreibung des IsWow64Process gibt es den Text "Beachten Sie, dass diese Technik ist keine zuverlässige Möglichkeit zu erkennen, ob das Betriebssystem eine 64-Bit-Version von Windows ist, weil die Kernel32.dll in aktuellen Versionen von 32-Bit-Windows enthält auch diese Funktion. "

    
user3759036 11.07.2014 08:56
quelle

Tags und Links