C#从COM对象获取progID

时间:2009-08-10 06:28:13

标签: c# com object marshalling

我想知道是否有办法在c#中获取com对象的progId。例如 - 我有一个webBrowser对象,它暴露了一个COM文档对象。有没有办法弄清楚该文档对象的progID是什么?

我知道你可以从progID获取对象,但不知道如何反过来。

1 个答案:

答案 0 :(得分:9)

您可以在其上查询IPersistGetClassID

这会让你CLSID。然后拨打ProgIDFromCLSID

The pinvoke declaration is here.

这会让你获得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#体验。)