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