This is a one percent post (i.e. 99% of the peeps here won't be interested).
If one has a tool to expose the properties and methods (PAM) of arbitrary objects what's one of the first things one should do?
Use it to document the PAM of the tool used to expose said PAM. Ahhh, recursively beautiful, almost poetry you say, and perfect for a Friday.
#<VLA-OBJECT _TLIApplication 02d90b48> (vlax-create-object "TLI.TLIApplication") PROPERTIES (PROPERTY VALUE RETURNTYPE ACCESS VISIBILITY)
("InvokeLCID" 1024 I4 READWRITE NORMAL)
("ListBoxNotification" nil EMPTY READWRITE NORMAL)
("RecordField" "<Error: Invalid number of parameters>" VARIANT READWRITE NORMAL)
("ResolveAliases" -1 BOOL READWRITE NORMAL)
Property(s) that take arguments:
"RecordField" (("RecordVARIANT" VARIANT) ("FieldName" STR))
METHODS (METHOD ARGUMENTS RETURNTYPE ACCESS)
("AddRef" nil UI4 RESTRICTED)
("ClassInfoFromObject" (("Object" UNKNOWN)) EMPTY NORMAL)
("GetIDsOfNames" (("riid" EMPTY) ("rgszNames" I1) ("cNames" UINT) ("lcid" UI4) ("rgdispid" I4)) VOID RESTRICTED)
("GetTypeInfo" (("itinfo" UINT) ("lcid" UI4) ("pptinfo" VOID)) VOID RESTRICTED)
("GetTypeInfoCount" (("pctinfo" UINT)) VOID RESTRICTED)
("InterfaceInfoFromObject" (("Object" DISPATCH)) EMPTY NORMAL)
("Invoke" (("dispidMember" I4) ("riid" EMPTY) ("lcid" UI4) ("wFlags" UI2) ("pdispparams" EMPTY) ("pvarResult" VARIANT) ("pexcepinfo" EMPTY) ("puArgErr" UINT)) VOID RESTRICTED)
("InvokeHook" (("Object" DISPATCH) ("NameOrID" VARIANT) ("InvokeKind" EMPTY)
("ReverseArgList" UNKNOWN)) VARIANT NORMAL)
("InvokeHookArray" (("Object" DISPATCH) ("NameOrID" VARIANT) ("InvokeKind" EMPTY) ("ReverseArgList" UNKNOWN)) VARIANT NORMAL)
("InvokeHookArraySub" (("Object" DISPATCH) ("NameOrID" VARIANT) ("InvokeKind" EMPTY) ("ReverseArgList" UNKNOWN)) VOID NORMAL)
("InvokeHookSub" (("Object" DISPATCH) ("NameOrID" VARIANT) ("InvokeKind" EMPTY) ("ReverseArgList" UNKNOWN)) VOID NORMAL)
("InvokeID" (("Object" DISPATCH) ("Name" STR)) I4 NORMAL)
("Me" nil EMPTY NORMAL)
("QueryInterface" (("riid" EMPTY) ("ppvObj" VOID)) VOID RESTRICTED)
("Release" nil UI4 RESTRICTED)
("TypeInfoFromITypeInfo" (("ptinfo" UNKNOWN)) EMPTY NORMAL)
("TypeInfoFromRecordVARIANT" (("RecordVARIANT" VARIANT)) EMPTY NORMAL)
("TypeLibInfoFromFile" (("FileName" STR)) EMPTY NORMAL)
("TypeLibInfoFromITypeLib" (("pITypeLib" UNKNOWN)) EMPTY NORMAL)
("TypeLibInfoFromRegistry" (("TypeLibGuid" STR) ("MajorVersion" I2)
("MinorVersion" I2) ("LCID" I4)) EMPTY NORMAL)
("_placeholder_destructor" nil VOID RESTRICTED)
#<VLA-OBJECT _SearchHelper 02d99708> (vlax-create-object "TLI.SearchHelper") PROPERTIES (PROPERTY VALUE RETURNTYPE ACCESS VISIBILITY)
("CheckHaveMatch" "<Error: Invalid number of parameters>" BOOL READONLY NORMAL)
("Init" "<Error: Invalid number of parameters>" VOID READONLY HIDDEN)
Property(s) that take arguments:
"CheckHaveMatch" (("Name" STR))
"Init" (("SysKind" EMPTY) ("LCID" I4) ("GrowSize" I2 OPTIONAL))
METHODS (METHOD ARGUMENTS RETURNTYPE ACCESS)
("AddRef" nil UI4 RESTRICTED)
("GetIDsOfNames" (("riid" EMPTY) ("rgszNames" I1) ("cNames" UINT) ("lcid" UI4)
("rgdispid" I4)) VOID RESTRICTED)
("GetTypeInfo" (("itinfo" UINT) ("lcid" UI4) ("pptinfo" VOID)) VOID RESTRICTED)
("GetTypeInfoCount" (("pctinfo" UINT)) VOID RESTRICTED)
("Invoke" (("dispidMember" I4) ("riid" EMPTY) ("lcid" UI4) ("wFlags" UI2)
("pdispparams" EMPTY) ("pvarResult" VARIANT) ("pexcepinfo" EMPTY) ("puArgErr"UINT)) VOID RESTRICTED)
("Me" nil EMPTY NORMAL)
("QueryInterface" (("riid" EMPTY) ("ppvObj" VOID)) VOID RESTRICTED)
("Release" nil UI4 RESTRICTED)
("_OldInit" nil VOID NORMAL)
("_placeholder_destructor" nil VOID RESTRICTED)
#<VLA-OBJECT _TypeLibInfo 02d90b78> (vlax-create-object "TLI.TypeLibInfo") PROPERTIES (PROPERTY VALUE RETURNTYPE ACCESS VISIBILITY)
("AppObjString" "" STR READWRITE NORMAL)
("AttributeMask" "<Error: TLI: No current typelib. Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" I2 READONLY NORMAL)
("AttributeStrings" "<Error: Invalid number of parameters>" I2 READONLY NORMAL)
("BestEquivalentType" "<Error: Invalid number of parameters>" STR READONLY NORMAL)
("CoClasses" "<Error: TLI: No current typelib. Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" EMPTY READONLY NORMAL)
("Constants" "<Error: TLI: No current typelib. Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" EMPTY READONLY NORMAL)
("ContainingFile" "" STR READWRITE NORMAL)
("CustomDataCollection" "<Error: TLI: No current typelib. Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" EMPTY READONLY NORMAL)
("Declarations" "<Error: TLI: No current typelib. Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" EMPTY READONLY NORMAL)
("GUID" "<Error: TLI: No current typelib. Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" STR READONLY NORMAL)
("GetTypeInfo" "<Error: Invalid number of parameters>" EMPTY READONLY NORMAL)
("GetTypeInfoNumber" "<Error: Invalid number of parameters>" I2 READONLY NORMAL)
("GetTypeKind" "<Error: Invalid number of parameters>" EMPTY READONLY NORMAL)
("HelpContext" "<Error: TLI: No current typelib. Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" I4 READONLY NORMAL)
("HelpFile" "<Error: TLI: No current typelib. Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" STR READONLY NORMAL)
("HelpString" "<Error: TLI: No current typelib. Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" STR READONLY NORMAL)
("HelpStringContext" "<Error: TLI: No current typelib. Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" I4 READONLY NORMAL)
("HelpStringDll" "<Error: TLI: No current typelib. Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" STR READONLY NORMAL)
("ITypeLib" "<Error: TLI: No current typelib. Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" UNKNOWN READWRITE HIDDEN)
("Interfaces" "<Error: TLI: No current typelib. Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" EMPTY READONLY NORMAL)
("IntrinsicAliases" "<Error: TLI: No current typelib. Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" EMPTY READONLY NORMAL)
("LCID" "<Error: TLI: No current typelib. Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" I4 READONLY NORMAL)
("LibNum" 0 I2 READWRITE NORMAL)
("MajorVersion" "<Error: TLI: No current typelib. Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" I2 READONLY NORMAL)
("MinorVersion" "<Error: TLI: No current typelib. Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" I2 READONLY NORMAL)
("Name" "<Error: TLI: No current typelib. Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" STR READONLY NORMAL)
("Records" "<Error: TLI: No current typelib. Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" EMPTY READONLY NORMAL)
("SearchDefault" 239 EMPTY READWRITE NORMAL)
("ShowLibName" 0 BOOL READWRITE NORMAL)
("SysKind" "<Error: TLI: No current typelib. Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" EMPTY READONLY NORMAL)
("TypeInfoCount" "<Error: TLI: No current typelib. Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" I2 READONLY NORMAL)
("TypeInfos" "<Error: TLI: No current typelib. Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" EMPTY READONLY NORMAL)
("Unions" "<Error: TLI: No current typelib. Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" EMPTY READONLY NORMAL)
("_OldGetTypeKind" "<Error: Member not found>" VOID READONLY NORMAL)
("_OldHelpString" "<Error: Member not found>" VOID READONLY NORMAL)
("_OldSysKind" "<Error: Member not found>" VOID READONLY NORMAL)
Property(s) that take arguments:
"AttributeStrings" (("AttributeArray" UNKNOWN))
"GetTypeInfo" (("Index" VARIANT))
"GetTypeInfoNumber" (("Name" STR))
"GetTypeKind" (("TypeInfoNumber" I2))
"HelpString" (("LCID" I4 OPTIONAL))
"HelpStringDll" (("LCID" I4 OPTIONAL))
"BestEquivalentType" (("TypeInfoName" STR))
METHODS (METHOD ARGUMENTS RETURNTYPE ACCESS)
("AddRef" nil UI4 RESTRICTED)
("AddTypes" (("TypeInfoNumbers" UNKNOWN) ("StartResults" EMPTY OPTIONAL)
("SearchType" EMPTY OPTIONAL) ("Sort" BOOL OPTIONAL)) EMPTY NORMAL)
("AddTypesDirect" (("TypeInfoNumbers" UNKNOWN) ("hWnd" INT) ("WindowType" EMPTY OPTIONAL) ("SearchType" EMPTY OPTIONAL)) I2 NORMAL)
("CaseMemberName" (("bstrName" STR) ("SearchType" EMPTY OPTIONAL)) BOOL NORMAL)
("CaseTypeName" (("bstrName" STR) ("SearchType" EMPTY OPTIONAL)) EMPTY NORMAL)
("FreeSearchCriteria" nil VOID NORMAL)
("GetIDsOfNames" (("riid" EMPTY) ("rgszNames" I1) ("cNames" UINT) ("lcid" UI4)
("rgdispid" I4)) VOID RESTRICTED)
("GetMemberInfo" (("SearchData" I4) ("InvokeKinds" EMPTY OPTIONAL) ("MemberId" I4 OPTIONAL) ("MemberName" STR OPTIONAL)) EMPTY NORMAL)
("GetMembers" (("SearchData" I4) ("ShowUnderscore" BOOL OPTIONAL)) EMPTY NORMAL)
("GetMembersDirect" (("SearchData" I4) ("hWnd" INT) ("WindowType" EMPTY OPTIONAL) ("ItemDataType" EMPTY OPTIONAL) ("ShowUnderscore" BOOL OPTIONAL)) I2 NORMAL)
("GetMembersWithSubString" (("SubString" STR) ("StartResults" EMPTY OPTIONAL)
("SearchType" EMPTY OPTIONAL) ("SearchMiddle" BOOL OPTIONAL) ("Helper" EMPTY OPTIONAL) ("Sort" BOOL OPTIONAL) ("ShowUnderscore" BOOL OPTIONAL)) EMPTY NORMAL)
("GetMembersWithSubStringDirect" (("SubString" STR) ("hWnd" INT) ("WindowType" EMPTY OPTIONAL) ("SearchType" EMPTY OPTIONAL) ("SearchMiddle" BOOL OPTIONAL)
("Helper" EMPTY OPTIONAL) ("ShowUnderscore" BOOL OPTIONAL)) I2 NORMAL)
("GetMembersWithSubStringEx" (("SubString" STR) ("InvokeGroupings" ARRAY)
("StartResults" EMPTY OPTIONAL) ("SearchType" EMPTY OPTIONAL) ("SearchMiddle" BOOL OPTIONAL) ("Sort" BOOL OPTIONAL) ("ShowUnderscore" BOOL OPTIONAL)) EMPTY NORMAL)
("GetTypeInfo" (("itinfo" UINT) ("lcid" UI4) ("pptinfo" VOID)) VOID RESTRICTED)
("GetTypeInfoCount" (("pctinfo" UINT)) VOID RESTRICTED)
("GetTypes" (("StartResults" EMPTY OPTIONAL) ("SearchType" EMPTY OPTIONAL)
("Sort" BOOL OPTIONAL)) EMPTY NORMAL)
("GetTypesDirect" (("hWnd" INT) ("WindowType" EMPTY OPTIONAL) ("SearchType" EMPTY OPTIONAL)) I2 NORMAL)
("GetTypesWithMember" (("MemberName" STR) ("StartResults" EMPTY OPTIONAL)
("SearchType" EMPTY OPTIONAL) ("Sort" BOOL OPTIONAL) ("ShowUnderscore" BOOL OPTIONAL)) EMPTY NORMAL)
("GetTypesWithMemberDirect" (("MemberName" STR) ("hWnd" INT) ("WindowType" EMPTY OPTIONAL) ("SearchType" EMPTY OPTIONAL) ("ShowUnderscore" BOOL OPTIONAL)) I2 NORMAL)
("GetTypesWithMemberEx" (("MemberName" STR) ("InvokeKind" EMPTY)
("StartResults" EMPTY OPTIONAL) ("SearchType" EMPTY OPTIONAL) ("Sort" BOOL OPTIONAL) ("ShowUnderscore" BOOL OPTIONAL)) EMPTY NORMAL)
("GetTypesWithSubString" (("SubString" STR) ("StartResults" EMPTY OPTIONAL)
("SearchType" EMPTY OPTIONAL) ("SearchMiddle" BOOL OPTIONAL) ("Sort" BOOL OPTIONAL)) EMPTY NORMAL)
("GetTypesWithSubStringDirect" (("SubString" STR) ("hWnd" INT) ("WindowType" EMPTY OPTIONAL) ("SearchType" EMPTY OPTIONAL) ("SearchMiddle" BOOL OPTIONAL)) I2 NORMAL)
("Invoke" (("dispidMember" I4) ("riid" EMPTY) ("lcid" UI4) ("wFlags" UI2)
("pdispparams" EMPTY) ("pvarResult" VARIANT) ("pexcepinfo" EMPTY) ("puArgErr" UINT)) VOID RESTRICTED)
("IsSameLibrary" (("CheckLib" EMPTY)) BOOL NORMAL)
("LoadRegTypeLib" (("TypeLibGuid" STR) ("MajorVersion" I2) ("MinorVersion" I2)
("LCID" I4)) VOID NORMAL)
("MakeSearchData" (("TypeInfoName" STR) ("SearchType" EMPTY OPTIONAL)) I4 NORMAL)
("Me" nil EMPTY NORMAL)
("QueryInterface" (("riid" EMPTY) ("ppvObj" VOID)) VOID RESTRICTED)
("Register" (("HelpDir" STR OPTIONAL)) VOID NORMAL)
("Release" nil UI4 RESTRICTED)
("ResetSearchCriteria" (("TypeFilter" EMPTY OPTIONAL) ("IncludeEmptyTypes" BOOL OPTIONAL) ("ShowUnderscore" BOOL OPTIONAL)) VOID NORMAL)
("SetMemberFilters" (("FuncFilter" EMPTY OPTIONAL) ("VarFilter" EMPTY OPTIONAL)) VOID NORMAL)
("UnRegister" nil VOID NORMAL)
("_OldAddClassTypeToList" nil VOID RESTRICTED)
("_OldCaseMemberName" nil VOID RESTRICTED)
("_OldCaseTypeName" nil VOID RESTRICTED)
("_OldFillMemberList" nil VOID RESTRICTED)
("_OldFillTypesCombo" nil VOID RESTRICTED)
("_OldFillTypesList" nil VOID RESTRICTED)
("_OldGetMembersWithSubString" nil VOID RESTRICTED)
("_OldGetTypesWithMember" nil VOID RESTRICTED)
("_OldGetTypesWithSubString" nil VOID RESTRICTED)
("_OldResetSearchCriteria" nil VOID RESTRICTED)
("_placeholder_destructor" nil VOID RESTRICTED)
Now you have the knowledge to do everything I'm doing.