32- und 64-Bit-Interoperabilität unter 64-Bit-Windows

8

Gibt es eine gute, gründliche verbindliche Referenz, die die Interoperabilität zwischen 32-Bit- und 64-Bit-Prozessen behandelt? Basierend auf dem Googlen habe ich Folgendes abgeleitet:

  1. Eine 32-Bit-DLL kann sich nur in einem 32-Bit-Prozess und eine 64-Bit-DLL nur in einem 64-Bit-Prozess befinden.
  2. 32- und 64-Bit-Prozesse können nur über lose gekoppelte Nachrichtensysteme kommunizieren, z. B. über Netzwerkkommunikation, dh sie können über COM / DCOM kommunizieren.
  3. 32- und 64-Bit-COM-Komponenten haben unterschiedliche Registrierungseinträge. Eine Komponente wird normalerweise nur in einer der beiden Kategorien registriert und normalerweise nur in einer der beiden Welten angezeigt.
  4. Ein 32-Bit-Prozess kann nur etwas erstellen, das als 64-Bit-COM-Komponente registriert ist, wenn es CoCreateInstance mit dem 64-Bit-Aufruf-Flag verwendet, oder (und ich rate, ob das möglich ist?) -Bit-Komponente ist irgendwie in der 32-Bit-Registrierung registriert, aber unter der Haube wird immer noch als ein out-of-Process-64-Bit-Prozess erstellt, oder wenn es eine 32-Bit-Shell-COM-Komponente ist, die die 64-Bit-Komponente erstellt und dann umgeleitet Anrufe dazu?

Dies deutet darauf hin, dass: 1. Eine 32-Bit-Anwendung kann GetObject nicht verwenden, um eine 64-Bit-Version von Excel zu erhalten, die ausgeführt wird? Oder kann es? Wie wird die ROT (Running Object Table) von einem 32- oder 64-Bit-Problem beeinflusst? Kann ein 32-Bit-Prozess eine Excel-Instanz erstellen, wenn nur eine 64-Bit-Version von Office installiert ist? Ich würde denken, die Antwort wäre "Nein", es sei denn, der 32-Bit-Prozess verwendet das 64-Bit-Flag in seinem CoCreateInstance-Aufruf oder wenn Excel sich auch irgendwie in der 32-Bit-Welt registriert?

Trifft Microsoft automatisch CoCreateInstance von einem 32-Bit-Prozess, überprüft die 64-Bit-Registrierung und versucht eine 64-Bit-Komponente zu erstellen, wenn keine in der 32-Bit-Registrierung registriert ist? Ich habe einige Versionshinweise aus 64-Bit-Office gelesen, in denen Microsoft vor dem Zugriff von 32-Bit-Anwendungen auf 64-Bit-Excel warnt, aber ich weiß von einem Fall, in dem es einfach zu funktionieren scheint.

Gibt es dafür einen guten technischen Sachbezug?

    
Kharina Tigerfish 25.01.2011, 20:39
quelle

1 Antwort

5

In den MSDN Library-Dokumentationen ist dies sehr gut erklärt CLSCTX. Viele Regeln, das Standardverhalten ist:

  

Wenn weder der Client noch der Server   gibt eine Präferenz an, dann:

     
  • Wenn der Computer, auf dem der Server gehostet wird, Windows XP oder   Windows Server 2003 ohne Service   Pack 1 (SP1) oder später installiert, dann   COM wird eine 64-Bit-Version von bevorzugen   der Server, falls verfügbar; sonst es   aktiviert eine 32-Bit-Version des   Server.

  •   
  • Wenn der Computer, der den Server hostet, Windows Server 2003 ausführt   mit SP1 oder später installiert, dann COM   wird versuchen, den Server zu finden   Architektur für den Kunden   die Architektur. Mit anderen Worten, für a   32-Bit-Client, COM aktiviert a   32-Bit-Server, falls verfügbar; Andernfalls   Es wird eine 64-Bit-Version von aktiviert   der Server. Für einen 64-Bit-Client, COM   Wird ein 64-Bit-Server aktiviert, wenn   verfügbar; Sonst wird es aktiviert   ein 32-Bit-Server.

  •   

Überprüfen Sie den MSDN-Artikel, wenn Sie dieses Verhalten überschreiben möchten.

    
Hans Passant 25.01.2011, 22:03
quelle

Tags und Links