C#从COM对象获取progID

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

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

您可以在其上查询IPersist和GetClassID 。

这会让你获得CLSID 。 然后调用ProgIDFromCLSID :

pinvoke声明就在这里。

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