È sbagliato pinvoke user32.dll su Windows 64 bit, da un'app a 64 bit? L'ho fatto con successo un numero di volte e non ho mai avuto un errore, ma sembra contraddittorio. Dovrei invece cercare user64.dll?C# PInvoking user32.dll su un sistema a 64 bit
24
A
risposta
30
Il nome user32.dll
è fuorviante. È la versione a 64 bit di user32.dll
che stai chiamando. La versione a 64 bit si trova a %windir%\System32\user32.dll
.
Una versione a 32 bit è inclusa per la compatibilità con le applicazioni a 32 bit. Si trova a %windir%\SysWOW64\user32.dll
. È possibile controllare utilizzando l'utility dumpbin
:
System32 \ user32.dll:
FILE HEADER VALUES
8664 machine (x64)
SysWOW64 \ user32.dll:
FILE HEADER VALUES
14C machine (x86)
0
Non c'è user64.dll per la stessa identica ragione appena descritto, il programma .net può essere agnostico per l'architettura della cpu, quindi lo stesso codice deve funzionare su x86 e x64.
Se si porta il programma su piattaforma x86, verrà comunque eseguito senza modifiche.
Immagino che quando hanno chiamato user32.dll non avessero in mente quegli scenari.
Ora è fuorviante, ma è stato originariamente chiamato così per differenziare tra 16 e 32 bit, vero? Ma non riescono a cambiare il nome, che spezzerebbe troppe cose ... –
Sì. Ricordo distintamente i problemi di protezione generale causati da "USER.EXE" in Windows 3.1 durante la mia infanzia. –
Devi amare come viene ancora chiamata la directory System32 in 64 bit windows :-) – Justin