2009-08-10 112 views
8

我想知道是否有一種方法可以獲取c#中com對象的progId。例如 - 我有一個webBrowser對象,公開一個文檔對象,它是COM。有沒有辦法找出該文檔對象的progID是什麼?C#從COM對象獲取progID

我知道你可以從progID獲得對象,只是不知道如何做另一種方式。

回答

8

您可以查詢IPersistGetClassID就可以了。

讓你的CLSID。然後調用ProgIDFromCLSID

The pinvoke declaration is here.

,讓你的進程id。

編輯:

要查詢的接口,你只是做在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#的經驗。)