9

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

我知道您可以从 progID 获取对象,只是不确定如何做相反的事情。

4

1 回答 1

9

您可以查询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# 体验。)

于 2009-08-10T06:46:36.260 回答