Llamando al código de 32 bits del proceso de 64 bits

Tengo una aplicación que estamos tratando de migrar a 64 bits desde 32 bits. Es .NET, comstackdo usando las banderas x64. Sin embargo, tenemos una gran cantidad de archivos DLL escritos en FORTRAN 90 comstackdos para 32 bits. Las funciones en los archivos DLL de FORTRAN son bastante sencillas: ingresa datos, saca datos; ningún estado de ningún tipo. Tampoco pasamos mucho tiempo allí, un total de quizás un 3%, pero la lógica de cálculo que realiza es invaluable.

¿Puedo de alguna manera llamar a las DLL de 32 bits desde el código de 64 bits? MSDN sugiere que no puedo, punto. He hecho algunas operaciones de piratería y verificado esto. Todo arroja una excepción de punto de entrada no válida. La única solución posible que he encontrado hasta ahora es crear contenedores COM + para todas las funciones DLL de 32 bits e invocar COM del proceso de 64 bits. Esto parece un gran dolor de cabeza. También podemos ejecutar el proceso en emulación WoW, pero luego el techo de la memoria no se incrementará, limitando a alrededor de 1.6 gb.

¿Hay alguna otra forma de llamar a las DLL de 32 bits desde un proceso CLR de 64 bits?

Tendrá que cargar el dll de 32 bits en un proceso separado de 32 bits y hacer que su proceso de 64 bits se comunique con él a través de la comunicación entre procesos. No creo que haya ninguna manera de cargar un dll de 32 bits en un proceso de 64 bits.

Hay un artículo bastante bueno aquí:

Acceso a archivos DLL de 32 bits desde código de 64 bits

Debe escribir sus procesos ejecutables como procesos de 32 bits (frente a cualquier CPU o x64) para que se carguen con WoW32 para Vista. Esto los cargará en el modo de emulación de 32 bits y no tendrá el problema de punto de entrada. Puede dejar sus bibliotecas en modo AnyCPU, pero sus ejecutables deben comstackrse como x86.

La respuesta de John es correcta si no quiere recomstackr sus dlls existentes; sin embargo, esa podría ser una opción para usted también.

Nuestro equipo actualmente está migrando nuestro código x86 FORTRAN a x64 para boost el límite de memoria.