Der Marshaling-Mechanismus

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu COM-Server


Unter Marshaling wird der Mechanismus verstanden, der es einem Client ermöglicht, Aufrufe von Schnittstellenfunktionen von Remote-Objekten in einem anderen Prozessraum oder auf einem anderen Computer durchzuführen. Dieser Mechanismus funktioniert folgendermaßen:

  • Der Mechanismus übernimmt einen Schnittstellenzeiger im Prozess des Servers und stellt dem Quelltext im Client-Prozess einen Zeiger auf einen Proxy-Server zur Verfügung.
  • Der Mechanismus überträgt die Argumente eines Schnittstellenaufrufs in der Form, in der diese übergeben wurden, und stellt diese in den Prozessraum des Remote-Objekts.

Für jeden Schnittstellenaufruf schiebt der Client Argumente auf einen Stack und führt über den Schnittstellenzeiger einen Funktionsaufruf durch. Wenn der Objektaufruf nicht innerhalb des Prozesses erfolgt, wird er an den Proxy-Server übergeben. Der Proxy-Server stellt die Argumente in ein Sequenzpaket und überträgt diese Struktur an das Remote-Objekt. Der Stub des Objekts "entpackt" das Paket wieder, schiebt die Argumente auf den Stack und ruft die Implementierung des Objekts auf. Das Wesentliche bei diesem Vorgang ist, dass das Objekt den Aufruf des Clients in seinem eigenen Prozessraum neu erzeugt.

Welche Art von Marshaling durchgeführt wird, hängt davon ab, welche Schnittstelle das COM-Objekt implementiert. Die Objekte können einen Standardmechanismus zur Sequenzbildung verwenden, welcher von der Schnittstelle IDispatch zur Verfügung gestellt wird. Hierbei handelt es sich um einen generischen Marshaling-Mechanismus, der die Kommunikation über einen Remote-Prozedurenaufruf (RPC) gemäß dem Systemstandard ermöglicht. Einzelheiten zur Schnittstelle IDispatch finden Sie im Abschnitt Automatisierungsschnittstellen. Auch wenn das Objekt IDispatch nicht implementiert und sich auf Typen beschränkt, die für die Automatisierung geeignet sind, und eine registrierte Typbibliothek besitzt, unterstützt COM automatisch den Marshaling-Mechanismus.

Anwendungen, die sich nicht selbst auf Typen beschränken, die für die Automatisierung geeignet sind, und keine Typbibliothek registrieren, müssen für ihre eigenes Marshaling sorgen. Marshaling wird möglich durch die Implementierung der Schnittstelle IMarshal oder durch Benutzung einer separat generierten Proxy/Stub-DLL. Die automatische Generierung solcher DLLs wird von Delphi nicht unterstützt.

Siehe auch