假设您有一个由coclasses ICOMInterface
和Coclass1
实现的COM接口Coclass2
。这些coclass都没有自己的接口(为了简单起见并说明我的问题)。
在C#中,您可以从coclass创建COM接口的实例,如下所示:
ICOMInterface myComInterface = new Coclass1();
现在,您如何确定myComInterface
或Coclass1
是否实例化了Coclass2
?
使用如下所示的“is”语句总是返回true,因此对此无用。
Debug.WriteLine(myComInterface is Coclass1) // writes "True"
Debug.WriteLine(myComInterface is Coclass2) // writes "True"
如果我测试的是接口而不是coclasses,这将会有效,但是这些coclasses除了它们实现的接口之外没有其他接口ICOMInterface
。
我希望有一个简单的答案可以忽略这个相当通用的场景,否则我可以根据需要发布更具体的细节。
感谢您的帮助!
答案 0 :(得分:1)
如果COM对象实现了IPersist接口,则可以通过IPersist::GetClassID()
方法获取其CLSID。这可能是您需要了解您正在使用的课程。您还可以通过WinAPI ProgIDFromCLSID()
方法获取人类可读的ProgID。