2011-01-25 13 views
8

Existe-t-il une bonne référence faisant autorité qui traite de l'interopérabilité entre les processus 32 bits et 64 bits? Basé sur googling j'ai déduit que:Interopérabilité 32 bits et 64 bits sur Windows 64 bits

  1. Une DLL 32 bits peut résider dans un processus 32 bits et une DLL 64 bits uniquement dans un processus 64 bits.
  2. Les processus 32 et 64 bits ne peuvent communiquer qu'en utilisant des systèmes de messagerie faiblement couplés, tels que les communications réseau, ce qui signifie qu'ils peuvent communiquer en utilisant COM/DCOM.
  3. Les composants COM 32 et 64 bits ont des entrées de registre différentes. Un composant n'est généralement enregistré que dans l'un des deux et n'est généralement visible que dans l'un des deux mondes.
  4. Un processus 32 bits peut uniquement créer quelque chose enregistré en tant que composant COM 64 bits s'il utilise CoCreateInstance avec l'indicateur d'invocation 64 bits, ou (et je suppose sur celui-ci, est-ce possible?) Si le 64 Le composant -bit est en quelque sorte enregistré dans le registre 32 bits mais sous le capot est toujours créé comme un processus 64 bits hors processus, ou s'il existe un composant COM du shell 32 bits qui crée le composant 64 bits, puis redirige appelle-t-il?

Cela suggère que: 1. Une application 32 bits ne peut pas utiliser GetObject pour mettre la main sur une version 64 bits d'Excel qui est en cours d'exécution? Ou peut-il? Comment la table des objets en cours d'exécution (ROT) est-elle affectée par le problème 32 par rapport à 64 bits? Un processus 32 bits peut-il créer une instance d'Excel si seule une version 64 bits d'Office est installée? Je pense que la réponse serait "non" à moins que le processus 32 bits utilise l'indicateur 64 bits dans son appel CoCreateInstance, ou si Excel en quelque sorte enregistré lui-même dans le monde 32 bits?

Est-ce que Microsoft fait automatiquement quoi que CoCreateInstance à partir d'un processus 32 bits vérifie le registre 64 bits et essaie de créer un composant 64 bits hors processus s'il n'y en a aucun dans le registre 32 bits? J'ai vu quelques notes de publication de Microsoft Office 64 bits où Microsoft m'avertit que l'accès des applications 32 bits à Excel 64 bits ne fonctionnait pas, mais je connais une instance où cela semblait fonctionner.

Existe-t-il une bonne référence factuelle technique pour cela?

Répondre

5

Il est très bien expliqué dans le MSDN Library docs pour CLSCTX. Beaucoup de règles, le comportement par défaut est:

Si ni le client ni le serveur indique une préférence, puis:

  • Si l'ordinateur qui héberge le serveur exécute Windows XP ou de Windows Serveur 2003 sans service Pack 1 (SP1) ou version ultérieure, puis COM préférera une version 64 bits de le serveur si disponible; sinon, activera une version 32 bits du serveur .

  • Si l'ordinateur qui héberge le serveur exécute Windows Server 2003 avec SP1 ou version ultérieure, alors COM va essayer de faire correspondre le serveur l'architecture à l'architecture client . En d'autres termes, pour un client 32 bits , COM activera un serveur 32 bits si disponible; sinon, il activera une version 64 bits de le serveur.Pour un client 64 bits, COM activera un serveur 64 bits si est disponible; sinon, il activera un serveur 32 bits.

Vérifiez l'article MSDN si vous voulez modifier ce comportement.

+0

Merci, j'avais sous-estimé cette section MSDN. Pourquoi alors cet article http://www.dnjonline.com/article.aspx?id=jun07_access3264 créer un wrapper COM 64 bits qui interagit simplement avec le COM un 32-bit? Cela devrait être inutile, car ayant seulement le composant COM de 32 bits, devrait être également utilisable à la fois des mondes 32 et 64 bits en supposant que les fonctions sont bien agencées et ainsi de suite. Regardez aussi sur http://blogs.technet.com/b/office2010/archive/2010/02/23/understanding-64-bit-office.aspx, le bas de ce que vous devriez savoir qui met en garde contre les incompatibilités. Pourquoi? –

+0

L'article DDJ met l'accent sur le fait que les serveurs COM 32 bits fonctionnent dans un processus 64 bits, l'encapsuleur doit être 64 bits. L'article Office met en garde contre les incompatibilités pour les serveurs COM * in-process *. Seuls les serveurs hors processus peuvent combler l'écart. –

+2

Le premier article du premier commentaire a été déplacé vers http://blog.mattmags.com/2007/06/30/accessing-32-bit-dlls-from-64-bit-code/ – AndrewS

Questions connexes