Domanda

Ho un'applicazione che stiamo provando a migrare a 64 bit da 32 bit. È .NET, compilato usando i flag x64. Tuttavia, abbiamo un gran numero di DLL scritte in FORTRAN 90 compilate per 32 bit. Le funzioni nelle DLL FORTRAN sono abbastanza semplici: inserisci i dati, li estrai; nessuno stato di alcun tipo. Inoltre non trascorriamo molto tempo lì, per un totale di forse il 3%, ma la logica di calcolo che esegue è preziosa.

Posso in qualche modo chiamare le DLL a 32 bit dal codice a 64 bit? MSDN suggerisce che non posso, punto. Ho fatto un semplice hacking e verificato questo. Tutto genera un'eccezione del punto di ingresso non valida. L'unica soluzione possibile che ho trovato finora è quella di creare wrapper COM + per tutte le funzioni DLL a 32 bit e richiamare COM dal processo a 64 bit. Sembra un bel mal di testa. Possiamo anche eseguire il processo nell'emulazione WoW, ma il limite di memoria non verrebbe aumentato, raggiungendo un limite di circa 1,6 GB.

Esiste un altro modo per chiamare le DLL a 32 bit da un processo CLR a 64 bit?

È stato utile?

Soluzione

Dovrai caricare la dll a 32 bit in un processo a 32 bit separato e far comunicare il tuo processo a 64 bit tramite la comunicazione tra processi. Non penso che in alcun modo una dll a 32 bit possa essere caricata in un processo a 64 bit altrimenti.

C'è un buon articolo qui:

Accesso a 32- bit DLL dal codice a 64 bit

Altri suggerimenti

È necessario scrivere i processi eseguibili come processi a 32 bit (rispetto a qualsiasi CPU o x64) in modo che vengano caricati con WoW32 per Vista. Questo li caricherà nella modalità di emulazione a 32 bit e non si avrà il problema del punto di ingresso. Puoi lasciare le tue librerie in modalità AnyCPU, ma i tuoi eseguibili devono essere compilati come x86.

La risposta di John è corretta se non vuoi ricompilare le tue dll esistenti; tuttavia, questa potrebbe essere un'opzione anche per te.

Il nostro team sta attualmente migrando il nostro codice FORTRAN x86 su x64 per aumentare il limite di memoria.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top