it-swarm.com.de

32bit-Code aus dem 64bit-Prozess aufrufen

Ich habe eine Anwendung, die wir versuchen, von 32bit auf 64bit zu migrieren. Es ist .NET, kompiliert mit den x64-Flags. Wir haben jedoch eine große Anzahl von DLLs, die in FORTRAN 90 für 32 Bit kompiliert wurden. Die Funktionen in den FORTRAN-DLLs sind ziemlich einfach: Sie geben Daten ein, Sie ziehen Daten ab; Kein Zustand irgendeiner Art. Wir verbringen auch nicht viel Zeit dort, insgesamt vielleicht 3%, aber die Berechnungslogik ist von unschätzbarem Wert.

Kann ich die 32bit-DLLs irgendwie aus 64bit-Code aufrufen? MSDN schlägt vor, dass ich das nicht kann, Punkt. Ich habe ein paar einfache Hacks gemacht und dies überprüft. Alles wirft eine ungültige Einstiegspunktausnahme aus. Die einzig mögliche Lösung, die ich bisher gefunden habe, ist das Erstellen von COM + - Wrappern für alle 32bit DLL Funktionen und das Aufrufen von COM aus dem 64bit-Prozess. Das scheint ziemlich Kopfschmerzen zu sein. Wir können den Prozess auch in der WoW-Emulation ausführen, aber dann würde die Speichergrenze nicht erhöht werden und würde bei 1,6 GB liegen.

Gibt es eine andere Möglichkeit, die 32-Bit-DLLs von einem 64-Bit-CLR-Prozess aufzurufen?

44
David J. Sokol

Sie müssen die 32-Bit-DLL in einen separaten 32-Bit-Prozess laden und mit Ihrem 64-Bit-Prozess über die Prozesskommunikation kommunizieren. Ich glaube nicht, dass eine 32-Bit-DLL sonst in einen 64-Bit-Prozess geladen werden kann.

Hier gibt es einen ziemlich guten Artikel:

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

32
John Sibly

Sie müssen Ihre ausführbaren Prozesse als 32-Bit-Prozesse (im Vergleich zu Any CPU oder x64) schreiben, damit sie mit WoW32 für Vista geladen werden. Dadurch werden sie im 32-Bit-Emulationsmodus geladen, und das Einstiegspunktproblem tritt nicht auf. Sie können Ihre Bibliotheken im AnyCPU-Modus belassen, aber Ihre ausführbaren Dateien müssen als x86 kompiliert werden.

1
Orion Adrian

Johns Antwort ist korrekt, wenn Sie Ihre vorhandenen DLLs nicht neu kompilieren möchten. Dies könnte jedoch auch eine Option für Sie sein. 

Unser Team migriert derzeit unseren x86-FORTRAN-Code nach x64, um die Speichergrenze zu erhöhen.

0
Rob Hunter