2012-10-23 13 views
10

Ho creato un progetto C++ a 64 bit in Visual Studio 2010 (in Windows 7 a 64 bit);Il programma 64bit vC++ sembra funzionare in modalità 32bit

ho pensato che stavo facendo funzionare un'applicazione a 64 bit, e il seguente codice tornato vero:

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

ma se ho chiamato la funzione IsWow64Process, è tornato FALSE ...

Altro cose strane:

  • chiamare LoadLibrary() per caricare una DLL sotto c:\windows\system32\some.dll funziona bene
  • caricamento di una DLL in c:\windows\sysWow64\some.dll fallirà (codice di errore 193: some.dll non è un'applicazione di Win32 valida)

Tutti questi fallimenti suggeriscono l'applicazione è in esecuzione in modalità a 32 bit, ma questo è contro il vero il tipo di puntatore è 8 byte lunghezza

Sono confuso, ogni aiuto sarà apprezzato!

risposta

11

chiamare LoadLibrary() per caricare una dll in c: \ windows \ system32 \ some.dll funziona correttamente; caricamento di una dll in c: \ windows \ sysWow64 \ some.dll non riuscirà

Tutto ciò che dici suggerisce che stai eseguendo 64 bit.

In Windows a 64 bit, la cartella System32 contiene le versioni 64 bit delle DLL, e la cartella SysWow64 contiene le versioni 32 bit. Quando IsWow64Process restituisce TRUE, significa che sei un'applicazione a 32 bit su un sistema operativo a 64 bit.

Questo è l'opposto di ciò che i nomi nella cartella suggeriscono, il che è probabilmente il motivo per cui questo sembra confondere. Fondamentalmente, la cartella SysWow64 è la versione a 32 bit per l'uso con WoW64, che è "Windows 32-bit su Windows 64-bit" - in pratica si usano le DLL WoW64 quando si esegue 32 bit e le normali DLL quando si esegue 64bit.

+0

+1 Tutto ciò che l'OP descrive è coerente al 100% con un'applicazione a 64 bit su un sistema operativo a 64 bit. –

+0

@DavidSchwartz Sì, le persone si confondono perché usare WoW64 significa che stai usando 32 bit, che è l'opposto di quello che penseresti dato il nome;) –

+0

Bella risposta. Realizzare la differenza tra WoW64 e system32 mi ha dato un bel po 'di tempo fa. – nothrow

3

Premere Ctrl-Shitf-Esc per eseguire l'applicazione Task Manager. Nella scheda "Processi" vedrai l'etichetta *32 con il nome di ogni processo a 32 bit. È uno dei modi più semplici per controllare il testimone di un processo.

Problemi correlati