2009-07-12 17 views
11

Chiedo perché ho notato che molti EXE a 64 bit si collegano a quelli che sembrano DLL a 32 bit.Un collegamento EXE a 64 bit contro DLL a 32 bit?

Ad esempio, i miei collegamenti di app MFC a 64 bit contro user32.dll, urlmon.dll, wininet.dll - tutti i quali sono DLL a 32 bit che risiedono in windows \ system32.

Quindi questa è una procedura specifica per MS che si applica a queste DLL oppure esiste la compatibilità con le versioni precedenti, per così dire, per EXE a 64 bit che devono utilizzare DLL legacy a 32 bit?

+0

Penso che siamo tutti pronti per la prossima versione di Dependency Walker. Gestisce gli eseguibili a 64 bit in un modo a volte fuorviante e mostra altri fastidiosi avvisi. Quelli non sono davvero bug, ma sicuramente possono essere presentati meglio. Penso che questo tipo di domande sia un +1 per una nuova versione. – eran

+0

@Eran, ho scaricato l'ultima dipende per 64 bit e mostra le DLL dipendenti come 64. –

+0

In realtà c'è qualche stregoneria - su Win64 il ntdll.dll a 64 bit viene caricato in TUTTI i processi, sia a 32 bit che a 64 -po. Ma niente di magico su nessuna delle DLL che hai menzionato. –

risposta

23

Non è possibile collegare EXE a 64 bit a DLL a 32 bit o viceversa. Su un sistema operativo Windows a 64 bit, le DLL in Windows \ System32 sono in realtà DLL a 64 bit. Le versioni a 32 bit sono in Windows \ SysWow64.

+1

Depends mostra quelle immagini come 32 bit ... come mai? –

+6

Se "dipende" è un programma a 32 bit, allora entra in gioco il commento di ssg - il livello WOW reindirizza la vista delle applicazioni a 32 bit del file system in modo che vedano cosa c'è in SysWow64 come in System32. –

+0

Wow, l'ho sempre pensato il contrario. Interessante. – thebunnyrules

13

Chiama 32 da 64, certo che può. (In Windows questo è chiamato WOW che significa Windows su Windows). Ma, viceversa, non funziona.

qui si ha la spiegazione di come:

http://blog.mattmags.com/2007/06/30/accessing-32-bit-dlls-from-64-bit-code/

spero che serve.

+1

È una tecnica utile e dovrebbe funzionare in entrambe le direzioni, ma non è in realtà "un collegamento". –

+0

Oh, OK: D Avrò bisogno di saperne di più: D – Sheldon

+1

Per essere precisi (ed evitare delusioni), non è proprio "Chiama 32 da 64", la "soluzione" descritta nell'articolo crea solo un surrogato 32 -bit process e utilizza IPC per inoltrare le chiamate da un processo a 64 bit. "Chiamare 32 da 64" direttamente non è possibile (in modalità utente) per quanto ne so. – rustyx

2

L'ultima versione di Dependency Walker (disponibile qui: http://www.dependencywalker.com/) risolve questo problema. Trova le DLL corrette ed evita errori imprecisi.

(Sono in ritardo alla festa, ma Google ancora trovato questa domanda quando ho avuto un problema simile.)

Problemi correlati