2009-07-27 11 views
5

Ho bisogno di creare un'applicazione per piattaforma a 64 bit per utilizzare alcune DLL create per macchine a 64 bit. So come puoi costruire ciascun progetto separatamente per il target per la piattaforma a 64 bit. Ma quando hai molti progetti in una soluzione di Visual Studio e alcune DLL dipendono dalle altre. Come si decide quali progetti creare come x64, x86 o Qualsiasi CPU.In Visual Studio, come creare correttamente un'applicazione per macchine a 64 bit?

Grazie in anticipo.

risposta

6

Quando un programma è compilato in "ANY CPU" significa che è neutro dell'architettura - Può essere eseguito sia in processo a 64 bit sia in un processo a 32 bit. È determinato dalla piattaforma su cui viene eseguito il programma. Se si tratta di una piattaforma a 64 bit, un programma integrato in QUALSIASI CPU verrà caricato come processo a 64 bit. D'altra parte se si tratta di una piattaforma a 32 bit, un programma integrato in QUALSIASI CPU verrà caricato in un processo a 32 bit.

Tuttavia, non si può costruire tutto come "qualsiasi CPU" perché si può avere dipendenze che richiede una piattaforma o l'altro

Un programma deve essere costruito con modalità x64 se ha le dipendenze x64 (basandosi su altre librerie che sono costruiti in x64). Questo richiede anche il programma da eseguire su una piattaforma a 64 bit

Un programma deve essere costruito con modalità x86 se ha non gestiti 32 dipendenze bit o se è riuscito librerie che vengono Buit in x86.

Un programma di programma non ha una dipendenza da x64 bit o dipendenze non gestite a 32 bit possono essere incorporate in "qualsiasi CPU".

Tuttavia, indipendentemente da queste regole, se si costruisce in QUALSIASI CPU, è necessario eseguire un test completo su una piattaforma a 64 bit e una piattaforma a 32 bit. Questo post discute di altri possibili problemi in modo più dettagliato.

More on ANY CPU

0

Se esiste una dipendenza solo 64 bit, è necessario creare ogni componente come 64 bit.

3

Il testimone dell'applicazione è determinato dall'eseguibile che carica le DLL. Finché il processo di avvio è configurato su target x64, le DLL verranno caricate come x64 purché siano configurate come x64 o Any CPU. Quindi, non è necessario configurare tutte le DLL come x64, solo l'applicazione di avvio. Il resto può essere lasciato come qualsiasi CPU a meno che non abbiano specifiche dipendenze a 64 bit.

2

Per me dipende davvero da cosa dipendo. O, più esattamente, da cosa dipende la chiusura transitiva delle dipendenze DLL per la mia applicazione. Se qualcuno di loro ha una particolare dipendenza dall'architettura (x86 o amd64), ho impostato il mio progetto per avere la stessa dipendenza. In questo modo posso essere certo che qualsiasi problema con il caricamento nella piattaforma sbagliata verrà visualizzato il prima possibile.

Se non c'è alcuna dipendenza della piattaforma e il mio codice non ne ha nessuno, l'ho impostato su AnyCPU finché non ho trovato qualche motivo per fare diversamente.

2

Per aggiungere in cima ad altre grandi risposte.Ho trovato alcune informazioni utili sul MSDN

Su un sistema a 64 bit di Windows operativo:

  • assembly compilati con/piattaforma: 86 eseguirà sul CLR a 32 bit in esecuzione in WOW64.
  • Eseguibili compilati con/platform: anycpu verrà eseguito sul CLR a 64 bit.
  • DLL compilate con/platform: anycpu verrà eseguito sullo stesso CLR del processo in cui viene caricato.

Si noti inoltre che le DLL x86 non possono essere caricate sul processo a 64 bit. Se non è possibile ottenere la versione x64 delle DLL, l'alternativa è eseguire DLL x86 su un processo a 32 bit (WOW64) e fare nuovamente la comunicazione interprocesso (IPC) con il processo a 64 bit. More detail.

1

C'è stata una grande discussione dall'anno scorso su questo su .NET Rocks, here, mi ha davvero aiutato a capire tutte le sfumature

Problemi correlati