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?

Foi útil?

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:

Acessando 32- bit DLLs de código de 64 bits

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top