2011-01-25 9 views
8

Esiste un riferimento autorevole approfondito che discuta l'interoperabilità tra i processi a 32 bit e 64 bit? Basandomi su google ho dedotto che:Interoperabilità a 32 e 64 bit su Windows a 64 bit

  1. Una DLL a 32 bit può risiedere solo in un processo a 32 bit e una DLL a 64 bit solo in un processo a 64 bit.
  2. I processi a 32 e 64 bit possono comunicare solo utilizzando sistemi di messaggi liberamente accoppiati, come le comunicazioni di rete, il che significa che possono comunicare utilizzando COM/DCOM.
  3. I componenti COM a 32 e 64 bit hanno voci di registro diverse. In genere, un componente viene registrato solo in uno dei due e in genere viene visualizzato solo in uno dei due mondi.
  4. Un processo a 32 bit può creare solo qualcosa registrato come componente COM a 64 bit se utilizza CoCreateInstance con il flag di chiamata a 64 bit o (e sto indovinando su questo, è possibile?) Se il 64 -bit componente è in qualche modo registrato nel registro a 32 bit, ma sotto il cappuccio viene ancora creato come processo a 64-bit fuori processo, o se c'è un componente COM shell a 32 bit che crea il componente a 64 bit e quindi reindirizza chiama ad esso?

Questo suggerisce che: 1. un'applicazione a 32 bit non possono utilizzare GetObject per entrare in possesso di una versione a 64 bit di Excel che esegue? O può? In che modo la tabella degli oggetti in esecuzione (ROT) ha un impatto 32 rispetto al problema a 64 bit? Un processo a 32 bit può creare un'istanza di Excel se è installata solo una versione di Office a 64 bit? Penserei che la risposta sarebbe "no" a meno che il processo a 32 bit utilizzi il flag a 64 bit nella sua chiamata a CoCreateInstance, o se Excel si fosse registrato in qualche modo anche nel mondo a 32 bit?

Microsoft esegue automaticamente qualcosa come avere CoCreateInstance da un processo a 32 bit, controllare il registro a 64 bit e provare a creare un componente a 64 bit non elaborato se nel registro a 32 bit non è registrato nessuno? Ho visto alcune note di rilascio da Office 64-bit in cui Microsoft avverte l'accesso da applicazioni a 32 bit a Excel a 64 bit non funzionante, eppure conosco un'istanza in cui sembrava funzionare.

Esiste un riferimento tecnico valido per questo?

risposta

5

È spiegato abbastanza bene nello MSDN Library docs per CLSCTX. Un sacco di regole, il comportamento di default è:

Se né il cliente né il server specifica una preferenza, quindi:

  • Se il computer che ospita il server è in esecuzione Windows XP o di Windows Server 2003 senza servizio Il pacchetto 1 (SP1) o successivo installato, quindi COM preferirà una versione a 64 bit di server, se disponibile; altrimenti, attiverà una versione a 32 bit del server .

  • Se il computer che ospita il server è in esecuzione Windows Server 2003 con SP1 o versione successiva, quindi COM cercherà di abbinare l'architettura server al client architettura. In altre parole, per un client a 32 bit , COM attiva un server a 32 bit se disponibile; altrimenti attiverà una versione a 64 bit di server.Per un client a 64 bit, COM attiverà un server a 64 bit se disponibile ; altrimenti attiverà un server a 32 bit.

Controllare l'articolo di MSDN, se si vuole ignorare questo comportamento.

+0

Grazie, ho sottovalutato la sezione MSDN. Perché allora questo articolo http://www.dnjonline.com/article.aspx?id=jun07_access3264 crea un wrapper COM a 64 bit che interagisce semplicemente con quello COM a 32 bit? Ciò non dovrebbe essere necessario, poiché avere solo il componente COM a 32 bit dovrebbe essere ugualmente utilizzabile da entrambi i mondi a 32 e 64 bit presupponendo un adeguato marshalling delle funzioni e così via? Guarda anche http://blogs.technet.com/b/office2010/archive/2010/02/23/understanding-64-bit-office.aspx, in basso "cosa dovresti sapere" che avverte sulle incompatibilità. Perché? –

+0

L'articolo DDJ si concentra su come i server COM a 32 bit funzionano in un processo a 64 bit, il wrapper deve essere a 64 bit. L'articolo di Office segnala le incompatibilità per i server COM * in-process *. Solo i server fuori processo possono colmare il divario. –

+2

Il primo articolo del primo commento è stato spostato su http://blog.mattmags.com/2007/06/30/accessing-32-bit-dlls-from-64-bit-code/ – AndrewS