Previous Table of Contents Next


20.4.3 Extent Format


   The marshaling format of the extent is best described using the following C++ structures. Note that the size of the extent is encoded in the extent header maintained by DCOM, so it does not have to be repeated here.

   struct DVO_EXTENT // DCOM value object extent

   {HRESULT statusCode; // Status of marshalingDVO_IFACE interfaces[]; // Marshaled interfaces

   };

   struct DVO_IFACE // value data container// for 1 interface

   {unsigned long dataLen; // Total length of packet dataIID remotedIID; // Remoted interfaceCLSID unmarshalCLSID;// Unmarshal classunsigned short cImpl; // Count of Implementations DVO_IMPLDATA implData[]; // Marshaled implementations

   };

   struct DVO_IMPLDATA // Marshaled implementation

   {unsigned long dataLen; // Length of dataIID iid; // Implementation interfaceDVO_BLOB data; // Value dataDVO_IFACE interfaces[]; // Recursive DVO interface

   };

   struct DVO_BLOB // Opaque type containing// marshaled members

   {unsigned long dataLen; // Length of value databyte data[]; // Value data

   };

   20.4.3.1 DVO_EXTENT

   This structure contains the entire DCOM value object information for a given DCOM call. The size and ID of the extent are specified in the ORPC_EXTENT (DCOM defined) structure. The statusCodeis used to pass error information, which cannot be returned normally between the client and server extent. The interfaces array, interfaces, contains the value data for each DCOM value object for the DCOM call.

   The DCOM value object extent will be identified with the following GUID:

   {106454c0-14b2-11d1-8a22-006097cc044d}

   20.4.3.2 DVO_IFACE

   This structure contains value data for a single DCOM value object. The dataLen member makes it easy to skip this structure; in doing so, one automatically skips any recursively marshaled interfaces. The remotedIID member identifies the most derived interface of the DCOM value object itself. The member unmarshalCLSID indicates the unmarshal class used in custom marshaling, if any.

   The cImpl member indicates how many interface DCOM value object interfaces are marshaled. Normally, this member has a value of 1, but it may be necessary to send value data for more than one interface.

   The implData array contains the blocks of marshaled value data.

   20.4.3.3 DVO_IMPLDATA

   This structure contains the value data of a DCOM value object. The value data corresponds to the DCOM value object identified by the iid member of the DVO_IMPLDATA structure. The value data is written to the data blob. If any marshaled data is itself a DCOM value object, its marshaling data will be added as an entry in the interfaces array.

   20.4.3.4 DVO_BLOB

   This contains the actual value data for the DCOM value object. The data has been marshaled using standard DCOM (NDR) marshaling.