Mam aplikację, którą próbujemy przenieść do wersji 64-bitowej z 32-bitowej. To .NET, skompilowany przy użyciu flag x64. Mamy jednak dużą liczbę bibliotek DLL napisanych w FORTRAN 90 skompilowanych dla 32-bitów. Funkcje bibliotek DLL FORTRAN są dość proste: wprowadzasz dane, wyciągasz dane; nie ma żadnego stanu. Nie spędzamy tam zbyt wiele czasu, łącznie około 3%, ale logika obliczeń, którą wykonuje, jest nieoceniona.Wywołanie 32-bitowego kodu z procesora 64-bitowego
Czy mogę w jakiś sposób wywołać 32-bitowe biblioteki DLL z kodu 64-bitowego? MSDN sugeruje, że nie mogę, kropka. Zrobiłem proste hakowanie i zweryfikowałem to. Wszystko powoduje zgłoszenie wyjątku dotyczącego nieprawidłowego punktu wejścia. Jedynym możliwym rozwiązaniem, jakie znalazłem do tej pory, jest utworzenie wrapperów COM + dla wszystkich 32-bitowych funkcji DLL i wywołanie COM z procesu 64-bitowego. To wydaje się dość bolesny. Możemy również uruchomić proces w emulacji WoW, ale wtedy pułap pamięci nie zostanie zwiększony, ograniczając się do około 1,6 gb.
Czy istnieje inny sposób wywołania 32-bitowych bibliotek DLL z 64-bitowego procesu CLR?
To jest 64-bitowa -> COM -> 32-bitowa rzecz, którą opisałem. Po przeczytaniu tego artykułu i próbie pobrania próbki do pracy zdecydowałem, że nie ma lepszego sposobu. Przynajmniej mam taką nadzieję. –
Odpowiedź Johna jest poprawna. W jednym procesie nie można mieszać modułów 32-bitowych i 64-bitowych. Musisz rozpocząć drugi proces. Zobacz także moją odpowiedź tutaj: http://stackoverflow.com/questions/6523075/how-to-force-net-application-to-run-in-32bit-mode/6533556#6533556 –
Nie musisz koniecznie używać Pakowarki COM +, ale musisz użyć procesu 32-bitowego. –