I need to write a function that dynamically extracts the progid from a COM object.
Is this possible?
What's the best way to do it?
EDIT: All the coclasses I need to process implement IProvideClassInfo
I need to write a function that dynamically extracts the progid from a COM object.
Is this possible?
What's the best way to do it?
EDIT: All the coclasses I need to process implement IProvideClassInfo
First of all, there is no guarantee the information is available in first place. Even if you just instantiated an object using ProgID, you might be unale to get it back.
The easiest is to query one of
IPersist
and friends (IPersistStream
etc.) interfaces, and callIPersist::GetClassID
to obtainCLSID
. Then convert to ProgID usingProgIDFromCLSID
or via registry lookup.Another option is to query
IProvideClassInfo
andIProvideClassInfo2
to access the CLSID of interest in this alternate way.The third option, if none of the two above worked, is to query
IDispatch
and attempt to open type library, then iterate through looking up for coclass information.