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 geschrieben in FORTRAN 90 für 32bit kompiliert. Die Funktionen in den FORTRAN-DLLs sind ziemlich einfach: Sie fügen Daten ein, Sie ziehen Daten heraus; Kein Zustand. Wir verbringen auch nicht viel Zeit dort, insgesamt vielleicht 3%, aber die Berechnungslogik, die es ausführt, ist von unschätzbarem Wert.Aufruf von 32-Bit-Code von 64-Bit-Prozess
Kann ich irgendwie die 32bit-DLLs aus 64-Bit-Code aufrufen? MSDN schlägt vor, dass ich nicht, Punkt. Ich habe ein paar einfache Hacking getan und dies überprüft. Alles löst eine ungültige Einstiegspunkt-Ausnahme aus. Die einzige mögliche Lösung, die ich bisher gefunden habe, ist, COM + -Wrapper für alle 32-Bit-DLL-Funktionen zu erstellen und COM aus dem 64-Bit-Prozess aufzurufen. Das scheint ein ziemlicher Kopfschmerz zu sein. Wir können den Prozess auch in der WoW-Emulation ausführen, aber dann wird die Speicherobergrenze nicht erhöht, da sie bei etwa 1,6 GB liegt.
Gibt es eine andere Möglichkeit, die 32-Bit-DLLs aus einem 64-Bit-CLR-Prozess aufzurufen?
Das ist die 64bit -> COM -> 32bit Sache, die ich beschrieb. Nachdem ich diesen Artikel gelesen hatte und versuchte, die Probe zur Arbeit zu bringen, entschied ich, dass es _got_ gibt, um ein besserer Weg zu sein. Zumindest hoffe ich das. –
Johns Antwort ist korrekt. Es gibt keine Möglichkeit, 32-Bit- und 64-Bit-Module in einem Prozess zu mischen. Sie müssen einen zweiten Prozess starten. Siehe auch meine Antwort hier: http://stackoverflow.com/questions/6523075/how-to-force-net-application-to-run-in-32bit-mode/6533556#6533556 –
Sie müssen nicht unbedingt verwenden COM + -Wrapper, aber Sie müssen einen 32-Bit-Prozess verwenden. –