Chamando o código de 32 bits do processo de 64 bits

Eu tenho um aplicativo que estamos tentando migrar para 64 bits de 32 bits. É .NET, compilado usando os sinalizadores x64. No entanto, temos um grande número de DLLs escritas no FORTRAN 90 compilado para 32 bits. As funções nas DLLs FORTRAN são bastante simples: você coloca dados, você extrai dados; nenhum estado de qualquer tipo. Nós também não gastamos muito tempo lá, um total de talvez 3%, mas a lógica de cálculo que executa é inestimável.

Posso de alguma forma chamar as DLLs de 32 bits do código de 64 bits? MSDN sugere que eu não posso, ponto final. Eu fiz alguns hackers simples e verifiquei isso. Tudo gera uma exceção de ponto de input inválida. A única solução possível que encontrei até agora é criar wrappers COM + para todas as funções DLL de 32 bits e invocar o COM do processo de 64 bits. Isso parece uma grande dor de cabeça. Também podemos executar o processo na emulação de WoW, mas o teto de memory não seria aumentado, ficando em torno de 1,6 gb.

Existe alguma outra maneira de chamar as DLLs de 32 bits de um processo CLR de 64 bits?

Você precisará ter a dll de 32 bits carregada em um processo de 32 bits separado e fazer com que o processo de 64 bits se comunique com ela por meio da comunicação entre processos. Eu não acho que existe alguma maneira de uma dll de 32 bits pode ser carregado em um processo de 64 bits de outra forma.

Há um bom artigo aqui:

Acessando DLLs de 32 bits do código de 64 bits

Você precisa escrever seus processos executáveis ​​como processos de 32 bits (versus qualquer CPU ou x64) para que eles sejam carregados com o WoW32 para o Vista. Isso irá carregá-los no modo de emulação de 32 bits e você não terá o problema do ponto de input. Você pode deixar suas bibliotecas no modo AnyCPU, mas seus executáveis ​​devem ser compilados como x86.

A resposta de João está correta se você não quiser recompilar suas dlls existentes; no entanto, isso pode ser uma opção para você também.

Nossa equipe está atualmente migrando nosso código x86 FORTRAN para x64 para aumentar o limite de memory.