Some type libraries use aliases and typedefs to give alternate names to data types, enumerations or structures. For example, ADO uses ADO_LONGPTR as a typedef of a LongInteger and SearchDirection as an alias of SearchDirectionEnum.
' ----------------------------------------------------------------------------
' Aliases and typedefs
' ----------------------------------------------------------------------------
CASE TKIND_ALIAS
cbstrName.Clear : cbstrOrigName.Clear : cbstrAliasName.Clear : cbstrAliasName2.Clear : cbstrTypedefName.Clear
hr = m_pTypeLib->GetDocumentation(i, @cbstrName, NULL, NULL, NULL)
IF hr = S_OK THEN
cbstrOrigName = cbstrName
IF pTypeAttr->tdescAlias.vt = VT_USERDEFINED THEN
' // If it is a user defined type, retrieve its name
hr = pTypeInfo->GetRefTypeInfo(pTypeAttr->tdescAlias.hreftype, @pRefTypeInfo)
IF hr = S_OK AND pRefTypeInfo <> NULL THEN
cbstrName.Clear
hr = pRefTypeInfo->GetDocumentation(-1, @cbstrName, NULL, NULL, NULL)
IF hr = S_OK THEN
cbstrAliasName = **cbstrOrigName & " = " & **cbstrName
cbstrAliasName2 = **cbstrName & " = " & **cbstrOrigName
END IF
pRefTypeInfo->Release
pRefTypeInfo = NULL
END IF
ELSEIF pTypeAttr->tdescAlias.vt = VT_PTR THEN
' // Pointer to a TYPEDESC structure
ptdesc = pTypeAttr->tdescAlias.lptdesc
DO
SELECT CASE ptdesc->vt
' // If it is a pointer, do it again
CASE VT_PTR
ptdesc = ptdesc->lptdesc
CASE VT_USERDEFINED
' // Retrieve the name of the user defined type
hr = pTypeInfo->GetRefTypeInfo(ptdesc->hreftype, @pRefTypeInfo)
IF hr = S_OK AND pRefTypeInfo <> NULL THEN
cbstrName.Clear
hr = pRefTypeInfo->GetDocumentation(-1, @cbstrName, NULL, NULL, NULL)
IF hr = S_OK THEN
cbstrAliasName = **cbstrOrigName & " = " & **cbstrName
cbstrAliasName2 = **cbstrName & " = " & **cbstrOrigName
END IF
pRefTypeInfo->Release
pRefTypeInfo = NULL
END IF
EXIT DO
CASE ELSE
' // Get the equivalent type
cbstrTypedefName = cbstrName & " = " & TLB_VarTypeToConstant(ptdesc->vt) & " <" & TLB_VarTypeToKeyword(pTypeAttr->tdescAlias.vt) & ">"
EXIT DO
END SELECT
LOOP
ELSE
' // Get the equivalent type
cbstrTypedefName = cbstrName & " = " & TLB_VarTypeToKeyword(pTypeAttr->tdescAlias.vt) & " ' <" & TLB_VarTypeToConstant(pTypeAttr->tdescAlias.vt) & ">"
END IF
IF LEN(cbstrTypedefName) THEN
TreeView_AddItem hTreeView, m_hTypedefsNode, NULL, cbstrTypedefName
ELSE
TreeView_AddItem hTreeView, m_hAliasesNode, NULL, cbstrAliasName
END IF
END IF
' ----------------------------------------------------------------------------