我想知道是否有一种方法可以在C#中获取COM对象的progID。例如,我有一个暴露了COM文档对象的WebBrowser对象,有没有办法找出该文档对象的progID是什么?
我知道可以通过progID获取对象,但不确定如何反过来做。
我想知道是否有一种方法可以在C#中获取COM对象的progID。例如,我有一个暴露了COM文档对象的WebBrowser对象,有没有办法找出该文档对象的progID是什么?
我知道可以通过progID获取对象,但不确定如何反过来做。
你可以查询 IPersist
,并在其中调用GetClassID方法。
这样就能得到CLSID
。然后调用ProgIDFromCLSID方法:
这样就能得到ProgID。
编辑:
要查询接口,只需在C#中进行强制转换:
IPersist p = myObj as IPersist;
if (p != null)
{
// phew, it worked...
}
在幕后,实际上正在发生的事情就是这样的,C++代码如下所示:
IUnknown *pUnk = // ... get object from somewhere
IPersist *pPersist = 0;
if (SUCCEEDED(pUnk->QueryInterface(IID_IPersist, (void **)&pPersist)))
{
// phew, it worked...
}
(但是现在没有人再费力手写这些东西了,因为智能指针基本上可以模拟C#的使用体验。)