Implémentation et activation d’un gestionnaire avec des données supplémentaires fournies par le serveur

Si le serveur souhaite inclure des données supplémentaires dans le paquet à utiliser par le gestionnaire, le serveur doit implémenter les interfaces IMarshal et IStdMarshalInfo . Le serveur doit agréger le marshaleur standard et doit déléguer la première partie du marshaling au marshaleur standard agrégé, y compris IMarshal :: GetUnmarshalClass, et doit ajouter sa propre taille de données à la taille retournée par le IMarshal :: GetMarshalSizeMaxdu marshaleur standard. Le marshaleur standard appelle IStdMarshalInfo :: GetClassForHandler pour récupérer le CLSID du gestionnaire à créer. Une fois que le marshaleur standard a effectué son marshaling, le serveur écrit ses propres données supplémentaires dans le flux. Les structures résultantes, avec des données supplémentaires dans le flux, sont affichées dans l’illustration suivante :

Diagramme qui affiche des structures avec des données supplémentaires dans le flux.

Server-Side les structures avec des données supplémentaires dans le flux

Cela permet à l’appel de COM à CoUnmarshalInterface côté client d’ignorer les données non lues et de conserver le flux dans la position appropriée qui suit toutes les données d’interface marshalées si le gestionnaire ne peut pas être créé.

Client-Side les structures avec des données supplémentaires dans le flux

Comme dans le cas où il n’y a pas de données serveur supplémentaires dans le flux, l’appel COM côté client à CoUnmarshalInterface créera l’identité et le gestionnaire. Le gestionnaire doit implémenter IMarshal et doit déléguer d’abord les appels IMarshal au marshaleur standard agrégé, puis marshaler ou démarshaler les données supplémentaires fournies par le serveur. Le UnmarshalInterface du gestionnaire sera appelé pour chaque unmarshalé, qu’il ait ou non marshalé l’interface. Dans ce cas, le serveur n’appelle pas CoGetStdMarshalEx , mais le gestionnaire doit le faire. La structure résultante côté client est présentée dans l’illustration suivante.

Diagramme qui montre la structure côté client.

Gestionnaire de Client-Side léger