Chamando de 32 bits Código de Processo 64bit
Pergunta
Eu tenho um aplicativo que estamos tentando migrar para 64 bits de 32 bits. É da NET, compilado usando as bandeiras x64. No entanto, temos um grande número de DLLs escritos em Fortran 90 compilados para 32 bits. As funções em DLLs FORTRAN são bastante simples: você coloca dados, você extrair dados; nenhum estado de qualquer espécie. Também não gastar muito tempo lá, um total de talvez 3%, mas a lógica de cálculo que ele executa é inestimável.
Posso alguma forma chamar as DLLs de 32 bits de código de 64 bits? MSDN sugere que eu não posso, período. Já fiz alguns hackers simples e verificado isso. Tudo lança uma exceção ponto de entrada inválido. A única solução possível que eu encontrei até agora é criar COM + wrappers para todas as funções de 32 bits DLL e invocar COM a partir do processo de 64 bits. Este parece ser bastante dor de cabeça. Também pode executar o processo em WoW emulação, mas depois o teto memória não seria aumentado, tampando em torno de 1,6 GB.
Existe alguma outra maneira de chamar as DLLs de 32 bits a partir de um processo de 64 bits CLR?
Solução
Você precisa ter o dll de 32 bits carregados em um processo de 32 bits separado, e ter o seu processo de 64 bits comunicar com ele via de comunicação entre processos. Eu não acho que há alguma maneira um 32-bit dll pode ser carregado em um processo de 64 bits contrário.
Há um artigo muito bom aqui:
Outras dicas
Você precisa escrever os seus processos executáveis ??como processos de 32 bits (versus Qualquer CPU ou x64), para que eles vão ser carregados com WOW32 para o Vista. Isto irá carregá-los no modo de emulação de 32 bits e você não terá o problema ponto de entrada. Você pode deixá-lo bibliotecas no modo AnyCPU, mas seus executáveis ??tem que ser compilado como x86.
A resposta de John está correto se você não quiser recompilar seu DLLs existentes; no entanto, que pode ser uma opção para você também.
A nossa equipe está atualmente migrando nosso código Fortran x86 para x64 para aumentar o limite de memória.