Вопрос

У меня есть приложение, которое мы пытаемся перенести на 64-битную версию с 32-битной.Это .NET, скомпилированный с использованием флагов x64.Однако у нас есть большое количество DLL, написанных на FORTRAN 90, скомпилированных для 32-битной версии.Функции в библиотеках FORTRAN довольно просты:вы вводите данные, вы извлекаете данные;никакого государства.Мы тоже не тратим на это много времени, всего около 3%, но логика вычислений, которую он выполняет, неоценима.

Могу ли я как-то вызвать 32-битные библиотеки DLL из 64-битного кода?MSDN предполагает, что я не могу, и точка.Я сделал простой взлом и проверил это.Все выдает исключение недопустимой точки входа.Единственное возможное решение, которое я нашел до сих пор, — это создать оболочки COM+ для всех 32-битных функций DLL и вызывать COM из 64-битного процесса.Кажется, это настоящая головная боль.Мы также можем запустить этот процесс в эмуляции WoW, но тогда потолок памяти не будет увеличен и составит около 1,6 ГБ.

Есть ли другой способ вызвать 32-битные библиотеки DLL из 64-битного процесса CLR?

Это было полезно?

Решение

Вам нужно будет загрузить 32-битную dll в отдельный 32-битный процесс, и ваш 64-битный процесс будет взаимодействовать с ней посредством межпроцессного взаимодействия.Я не думаю, что в противном случае 32-битную dll можно загрузить в 64-битный процесс.

Здесь есть довольно хорошая статья:

Доступ к 32-битным DLL из 64-битного кода

Другие советы

Вам необходимо записать свои исполняемые процессы как 32-битные процессы (а не любой процессор или x64), чтобы они загружались с WoW32 для Vista.Это загрузит их в 32-битном режиме эмуляции, и у вас не возникнет проблем с точкой входа.Вы можете оставить свои библиотеки в режиме AnyCPU, но ваши исполняемые файлы должны быть скомпилированы как x86.

Ответ Джона правильный, если вы не хотите перекомпилировать существующие библиотеки DLL;однако это может быть вариантом и для вас.

Наша команда в настоящее время переносит наш код FORTRAN с x86 на x64, чтобы увеличить потолок памяти.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top