2010-02-15 27 views
28

C'è un modo per caricare una libreria DLL a 32 bit (qualcosa con lo stesso utilizzo di LoadLibrary) Vorrei usare quella funzione insieme a GetProcAddress.Carica libreria DLL a 32 bit in applicazione a 64 bit

Ho guardato WOW, ma non sembra offrire la funzionalità. La funzionalità dovrebbe esistere, dal momento che strumenti come DependencyWalker sono in grado di leggere i simboli di una dll a 32 bit anche se i suoi 64 bit.

grazie

+0

Questa risposta è disponibile qui: http://stackoverflow.com/questions/128445/calling-32bit-code-from-64bit-process. Anche la risposta di John Knoeller qui sotto è corretta. –

+0

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

+0

@John B. Lambe Il titolo di questo post è più chiaro di quello che collegato per coloro che stanno cercando la cosa di exe-call-dll. – ebk

risposta

40

Spiacente, ma è possibile caricare una DLL a 32 bit in un processo a 64 bit quando si carica la DLL come file di dati. Non è possibile eseguire il codice. http://support.microsoft.com/kb/282423

Microsoft consiglia di utilizzare la COM interprocess per utilizzare il codice a 32 bit con un'applicazione a 64 bit. Ecco un articolo che spiega il processo http://blog.mattmags.com/2007/06/30/accessing-32-bit-dlls-from-64-bit-code/ Non è divertente.

+0

Link aggiornato per l'articolo: http://blog.mattmags.com/2007/06/30/accessing-32-bit-dlls-from-64-bit-code/ Vedi anche http://stackoverflow.com/questions/128445/chiama-32bit-codice-da-64bit-processo –

2

C'è una differenza tra la lettura di un file eseguibile a 32 bit e l'esecuzione di codice all'interno di un eseguibile a 32 bit. Non credo che Windows offra alcuna funzionalità per farlo.

L'unico modo in cui è probabile che sia possibile farlo è creare un processo a 32 bit che carichi la DLL e quindi esegua la comunicazione interprocesso per passare i risultati tra i due processi.

0

Se tutto hai intenzione di fare è ottenere le risorse da esso, è possibile caricare come un file di dati:

LoadLibraryEx(exeName, NULL, LOAD_LIBRARY_AS_DATAFILE); 

quindi chiamare FindResource come normale.

Problemi correlati