Pregunta

Tengo una aplicación que estamos intentando migrar a 64 bits desde 32 bits. Es .NET, compilado utilizando las banderas x64. Sin embargo, tenemos un gran número de DLL escritas en FORTRAN 90 compiladas para 32 bits. Las funciones en las DLL de FORTRAN son bastante simples: usted introduce datos, saca datos; Ningún estado de ningún tipo. Tampoco pasamos mucho tiempo allí, tal vez un 3%, pero la lógica de cálculo que realiza es invaluable.

¿Puedo llamar de alguna manera a las DLL de 32 bits desde el código de 64 bits? MSDN sugiere que no puedo, punto. He hecho un simple pirateo y verifiqué 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 envoltorios COM + para todas las funciones DLL de 32 bits e invocar a COM desde el proceso de 64 bits. Esto parece bastante un dolor de cabeza. También podemos ejecutar el proceso en la emulación de WoW, pero luego no se aumentaría el límite de memoria, con un límite máximo de alrededor de 1.6 gb.

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

¿Fue útil?

Solución

Necesitará tener la dll de 32 bits cargada en un proceso separado de 32 bits y su proceso de 64 bits se comunicará a través de la comunicación entre procesos. No creo que haya ninguna manera de que una dll de 32 bits se pueda cargar en un proceso de 64 bits de otra manera.

Aquí hay un artículo bastante bueno:

Acceso 32- DLL de bits desde código de 64 bits

Otros consejos

Debe escribir sus procesos ejecutables como procesos de 32 bits (en comparación con 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 del punto de entrada. Puedes dejar tus bibliotecas en el modo AnyCPU, pero tus ejecutables deben compilarse como x86.

La respuesta de John es correcta si no desea volver a compilar sus archivos DLL existentes; Sin embargo, esa también podría ser una opción para ti.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top