2010-07-27 29 views
2

假設你有一個COM接口ICOMInterface,它是由coclasses Coclass1Coclass2實現的。這些共同課都沒有自己的接口(爲了簡單起見和說明我的問題)。C# - 如何在運行時測試哪個COM coclass被用來實例化一個接口?

在C#中,你可以像這樣從一個組件類創建一個COM接口的一個實例:

ICOMInterface myComInterface = new Coclass1(); 

現在,你怎麼能確定myComInterface是否由Coclass1Coclass2實例?

使用如下所示的「is」語句總是返回true,並且因此對於此目的沒有用處。

Debug.WriteLine(myComInterface is Coclass1) // writes "True" 
Debug.WriteLine(myComInterface is Coclass2) // writes "True" 

這工作,如果我是測試接口,而不是組件類,但這些組件類沒有一個比他們都實現,ICOMInterface其他接口。

我希望有一個簡單的答案,我可以忽略這種相當普遍的情況,否則我可以發佈更多具體細節,如果需要的話。

感謝您的幫助!

回答

1

如果COM對象實現IPersist接口,則可以通過IPersist::GetClassID()方法獲取其CLSID。這可能是你需要知道你正在使用什麼課程的一切。您也可以通過WinAPI ProgIDFromCLSID()方法獲取可讀的ProgID。

請看這裏:C# Get progID from COM object

相關問題