Règles de marshaling pour le marshaling d’utilisateur _ et le _ marshaling de câble

La spécification OSF-DCE pour le marshaling des types de pointeurs incorporés exige que vous observiez les restrictions suivantes lors de l’implémentation des < fonctions type d' > _ utilisateur, < type > _ UserMarshal et < type > _ UserUnMarshal. (Les règles et les exemples fournis ici sont pour le marshaling. Toutefois, vos routines de dimensionnement et de démarshaling doivent respecter les mêmes restrictions) :

  • Si le type de câble est un type plat sans pointeurs, votre routine de marshaling pour le type utilisateur correspondant doit simplement marshaler les données en fonction de la disposition du type de câble. Par exemple :

    typedef [wire_marshal (long)] void * HANDLE_HANDLE;
    

    Notez que le type de câble long est un type plat. Le handle de la _ _ fonction UserMarshal marshale une valeur de type long chaque fois qu’un _ objet descripteur de handle lui est passé.

  • Si le type de câble est un pointeur vers un autre type, votre routine de marshaling pour le type utilisateur correspondant doit marshaler les données en fonction de la disposition du type vers lequel pointe le type de réseau. Le moteur de NDR s’occupe du pointeur. Par exemple :

    typedef struct HDATA
    {
        long size;
        [size_is(size)] long * pData;
    } HDATA;
    
    typedef HDATA * WIRE_TYPE;
    typedef [wire_marshal(WIRE_TYPE)] void * HANDLE_DATA;
    

    Notez que le type de câble , _ type de câble, est un type pointeur. Votre fonction de gestion de _ données _ UserMarshal marshale les données associées au handle, à l’aide de la disposition HDATA, plutôt que de la * disposition HDATA.

  • Un type de câble doit être un type de données plat ou un type pointeur. Si votre type transmissible doit être autre chose (une structure avec des pointeurs, par exemple), utilisez un pointeur vers le type souhaité comme type de câble.

L’effet de ces restrictions est que les types définis avec les attributs de marshaling de [ câble _ ] ou d' [ utilisateur _ ] peuvent être incorporés librement dans d’autres types.

Marshal de câble _

Marshal d’utilisateur _

La fonction type d' _ utilisateur

Type _ UserMarshal (fonction)

Thetype _ UserUnMarshalFunction

Thetype _ UserFreeFunction