Le mécanisme du marshaling

De RAD Studio
Aller à : navigation, rechercher

Remonter à Serveurs COM


Le marshaling est le mécanisme qui permet à un client de faire des appels aux fonctions de l'interface d'objets distants qui se trouvent dans un autre processus ou sur une autre machine. Le marshaling

  • Prend un pointeur d’interface dans le processus du serveur et rend un pointeur de proxy disponible au code dans le processus du client.
  • Prend les arguments d’un appel à l’interface passés depuis le client et les place dans l’espace processus de l’objet distant.

Pour tout appel à l'interface, le client met les arguments sur une pile et émet un appel à une fonction via le pointeur d'interface. Si l'appel à l'objet n'est pas en processus, il est passé au proxy. Celui-ci compresse les arguments dans un paquet de marshaling et transmet la structure à l'objet distant. Le stub de l'objet décompresse le paquet, place les arguments sur la pile et appelle l'implémentation de l'objet. L'objet recrée l'appel du client dans son propre espace d'adressage.

Le type de marshaling dépend de l'interface implémentée par l'objet COM. Les objets peuvent utiliser le mécanisme de marshaling standard fourni par l'interface IDispatch. C'est un mécanisme de marshaling générique qui permet la communication via un appel standard à une procédure distante (RPC). Pour plus de détails sur l'interface IDispatch voir Interfaces d'Automation. Quand l'objet n'implémente pas IDispatch, s'il se limite lui-même aux types compatibles Automation et s'il a une bibliothèque de types recensée, COM fournit automatiquement la gestion du marshaling.

Les applications qui ne se limitent pas eux-mêmes aux types compatibles automation ou recensent une bibliothèque de types doivent fournir leur propre marshaling. Le marshaling est fourni par le biais d'une implémentation de l'interface IMarshal , ou en utilisant une DLL proxy/stub générée séparément. Delphi ne prend pas en charge la génération automatique des DLL proxy/stub.

Voir aussi