2012-10-23 5 views
10

Ich habe ein 64bit C++ Projekt in Visual Studio 2010 (unter Windows 7 64bit) erstellt;64bit vC++ Programm scheint unter 32bit Modus zu laufen

ich dachte, dass ich eine 64-Bit-Anwendung ausgeführt wird, und der folgende Code zurück wahr:

bool is64bit = (sizeof(void*)==8); 

aber wenn ich die Funktion IsWow64Process genannt, kehrte er FALSCH ...

Mehr seltsame dinge:

  • aufrufen LoadLibrary() eine dll unterladenfunktioniert gut
  • eine DLL unter c:\windows\sysWow64\some.dll Laden fehl (Fehlercode 193: some.dll ist keine gültige Win32-Anwendung)

diese Fehler deuten darauf hin, alle die Anwendung unter 32-Bit-Modus ausgeführt wird, aber das ist gegen die Wahrheit ist der Zeigertyp 8-Byte Länge

Ich bin verwirrt, jede Hilfe wird geschätzt!

Antwort

11

Aufruf LoadLibrary(), um eine DLL unter c: \ windows \ system32 \ some.dll zu laden funktioniert gut; das Laden einer DLL unter c: \ windows \ sysWow64 \ some.dll schlägt fehl

Alles, was Sie sagen, schlägt vor, dass Sie 64 Bit ausführen.

In Windows 64bit, die System32 Ordner enthalten die 64-Bit-Versionen des DLLs, und die SysWow64 Ordner enthalten die 32-Bit-Versionen. Wenn IsWow64Process TRUE zurückgibt, bedeutet dies, dass Sie eine 32-Bit-Anwendung auf einem 64-Bit-Betriebssystem verwenden.

Dies ist das Gegenteil von dem, was die Namen in dem Ordner vermuten, was wahrscheinlich ist, warum dies verwirrend scheint. Grundsätzlich ist der Ordner SysWow64 die 32-Bit-Versionen für den Einsatz unter WoW64, die "Windows 32-Bit auf Windows 64-Bit" ist - im Grunde verwenden Sie die WoW64-DLLs , wenn Sie 32bit ausführen, und die normalen DLLs, wenn Sie ausführen 64 Bit.

+0

+1 Alles, was das OP beschreibt, ist zu 100% konsistent mit einer 64-Bit-Anwendung auf einem 64-Bit-Betriebssystem. –

+0

@DavidSchwartz Yeah - Leute werden verwirrt, weil die Verwendung von WoW64 bedeutet, dass Sie 32bit laufen, was das Gegenteil von dem ist, was Sie denken, wenn Sie den Namen nennen;) –

+0

Schöne Antwort. Den Unterschied zwischen WoW64 und System32 zu erkennen gab mir vor einiger Zeit starke Kopfschmerzen. – nothrow

3

Drücken Sie Ctrl-Shitf-Esc, um Task-Manager-Anwendung auszuführen. In der Registerkarte "Prozesse" sehen Sie *32 Label mit dem Namen jedes 32-Bit-Prozesses. Dies ist eine der einfachsten Möglichkeiten, die Bitterkeit eines Prozesses zu überprüfen.