C# - 如何在运行时测试使用哪个COM coclass来实例化接口?

时间:2010-07-27 22:34:09

标签: c# com interface

假设您有一个由coclasses ICOMInterfaceCoclass1实现的COM接口Coclass2。这些coclass都没有自己的接口(为了简单起见并说明我的问题)。

在C#中,您可以从coclass创建COM接口的实例,如下所示:

ICOMInterface myComInterface = new Coclass1();

现在,您如何确定myComInterfaceCoclass1是否实例化了Coclass2

使用如下所示的“is”语句总是返回true,因此对此无用。

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

如果我测试的是接口而不是coclasses,这将会有效,但是这些coclasses除了它们实现的接口之外没有其他接口ICOMInterface

我希望有一个简单的答案可以忽略这个相当通用的场景,否则我可以根据需要发布更具体的细节。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

如果COM对象实现了IPersist接口,则可以通过IPersist::GetClassID()方法获取其CLSID。这可能是您需要了解您正在使用的课程。您还可以通过WinAPI ProgIDFromCLSID()方法获取人类可读的ProgID。

见这里:C# Get progID from COM object