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
- 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.
- 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.
- 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.
- 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?
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é? –
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. –
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