Verwenden einer 32-Bit-DLL in einem 64-Bit-Prozess über COM

8

Vor einiger Zeit untersuchte ich ein Problem, von dem ich wusste, dass es bald kommen würde. Wir haben eine DLL, die auf 32-Bit-Versionen einer bestimmten Bibliothek verweist. Es gibt keine x64-Version dieser Bibliothek, und wir haben keine praktischen Optionen, sie zu ersetzen.

Als ich diese erste Untersuchung durchführte, fand ich einen oder zwei Artikel, die eine Methode beschreiben, mit der ein 64-Bit-Prozess eine 32-Bit-DLL (Windows) über einen COM- "Server" nutzen kann. Leider habe ich die Links verloren, die ich gespeichert hatte, und ich habe jetzt über eine Stunde ohne Glück gesucht.

Kennt jemand hier den Prozess, den ich beschreibe? Ich kann nicht für das Leben von mir erinnern, welche magische Beschwörung ich verwendet habe, um das richtige Ergebnis in einer Suche hochzuziehen, und natürlich ist es jetzt Implementierungszeit. Vielen Dank im Voraus für jede Hilfe, die Sie anbieten können, werde ich in der Zwischenzeit weiter suchen.

    
Ed S. 28.12.2011, 19:30
quelle

3 Antworten

5

Dies ist möglicherweise nicht genug, aber es könnte Ihnen den Einstieg ermöglichen: Process Interoperabilität

  

Unter 64-Bit-Windows kann ein prozessexterner 32-Bit-COM-Server mit einem 64-Bit-Client kommunizieren, und ein prozessinterner 64-Bit-COM-Server kann mit einem 32-Bit-Client kommunizieren. Wenn Sie eine 32-Bit-DLL haben, die nicht COM-fähig ist, können Sie sie daher in einen prozessexternen COM-Server umwandeln und COM verwenden, um Aufrufe an und von einem 64-Bit-Prozess zu leiten.

Und Zugriff auf 32- Bit-DLLs aus 64-Bit-Code

  

Die Migration Ihrer 32-Bit-Windows-Anwendung auf eine 64-Bit-Maschine kann problematisch sein, wenn Sie über 32-Bit-DLLs verfügen, die nicht neu geschrieben werden können. Mike Becker zeigt Ihnen, wie Sie mithilfe von integrierten IPC-Mechanismen aus 64-Bit-Code auf 32-Bit-DLLs zugreifen können ...

    
crashmstr 28.12.2011, 19:35
quelle
3

Client des Out-of-Process Local Servers ist ein Beispiel für das Ausführen einer COM aus dem Prozess. Wenn Sie einen Com-Server außer Betrieb nehmen, kann Ihr Client 64-Bit- und 32-Bit-Server sein.

    
parapura rajkumar 28.12.2011 19:36
quelle
1

Sie können eine COM-Exec oder einen COM-Dienst erstellen, der immer als 32-Bit ausgeführt wird. Innerhalb dieser 32-Bit-Exe können Sie auf Ihre 32-Bit-DLL zugreifen, die auf 32-Bit-Versionen der Bibliothek verweist.

Das folgende Blockdiagramm erklärt die Grundlagen

Sehen Sie sich diesen Link für Details an:

Ссылка

    
Ajit Vaze 29.12.2011 07:12
quelle

Tags und Links