2.6.1.1 DispidRowset Algorithm
The result of the following algorithm can determine the property value of the DispidRowset field of a ClassInfoDataBlock.
-
CALL the GetTypeAttr method of this type information returning TYPEATTR ta. IF ta.wTypeFlags and TYPEFLAG_FDUAL THEN FOR each function in this type information CALL the GetFuncDesc method of this type information with the index of this function, returning FUNCDESC fd. IF fd.lprgelemdescParam is NOT EQUAL TO zero AND fd.invkind is EQUAL TO INVOKE_PROPERTYPUT THEN SET TYPEDESC td to fd.lprgelemdescParam.tdesc. IF td.vt is EQUAL TO VT_PTR THEN SET td to td.lptdesc. END IF IF td.vt is EQUAL TO VT_USERDEFINED THEN SET HREFTYPE hr to td.hreftype. CALL the GetRefTypeInfo of this type information with hr, returning ITypeInfo ti2. CALL the GetTypeAttr method of ti2, returning TYPEATTR ta2. IF ta2.guid is EQUAL TO {0C733A52-2A1C-11CE-ADE5-00AA0044773D} THEN RETURN fd.memid. END IF END IF END IF END FOR ELSE FOR each data property in this type information CALL the GetVarDesc method of this type information with the index of this property, returning VARDESC vd. SET td to vd.elemdescVar.tdesc. IF td.vt is EQUAL TO VT_PTR THEN SET td to td.lptdesc. END IF IF td.vt is EQUAL TO VT_USERDEFINED THEN SET HREFTYPE hr to td.hreftype. CALL the GetRefTypeInfo of this type information with hr, returning ITypeInfo ti2. CALL the GetTypeAttr method of ti2, returning TYPEATTR ta2. IF ta2.guid is EQUAL TO {0C733A52-2A1C-11CE-ADE5-00AA0044773D} THEN RETURN vd.memid. END IF END IF END FOR END IF