2.2.28.2.1 _wireBRECORD

The _wireBRECORD structure is the wire representation of a collection of UDTs of the same type. This representation MUST be used when the UDTs appear inside a SAFEARRAY (section 2.2.30.10) or inside a VARIANT (section 2.2.29.2). Otherwise, the UDTs MUST be NDR-marshaled as specified by their IDL. For more information, see [C706] section 14.

 typedef struct _wireBRECORD {
   ULONG fFlags;
   ULONG clSize;
   MInterfacePointer* pRecInfo;
   [size_is(clSize)] byte* pRecord;
 } wireBRECORDStr;

fFlags: MUST be 0 if pRecord is NULL. Otherwise, the value MUST be 1.

clSize: MUST be 0 if pRecord is NULL. Otherwise, the value MUST equal the size (in bytes) of the UDTs contained in pRecord, plus 4 bytes to account for the prefix contained in pRecord.

pRecInfo: MUST specify an MInterfacePointer that MUST contain an OBJREF_CUSTOM with a CLSID field set to CLSID_RecordInfo (1.9) and a pObjectData field that MUST contain a RecordInfoData binary large object (BLOB) (2.2.31). The iid field of the OBJREF portion of the structure MUST be set to IID_IRecordInfo (1.9). An implementation MAY use this value as the IID of a local-only interface.<5>

pRecord: MUST be NULL if there are no UDTs. Otherwise, the value MUST contain the NDR-marshaled representation of the UDTs, prefixed by a 4-byte unsigned integer that specifies the size, in bytes. This integer MUST equal the value of clSize.

Data of this type MUST be marshaled as specified in [C706] section 14, with the exception that the fields fFlags, clSize, and the 4-byte prefix in pRecord MUST be marshaled by using a little-endian data representation, regardless of the data representation format label. For more information, see [C706] section 14.2.5.