【问题标题】:C# - How to test at runtime which COM coclass was used to instantiate an interface?C# - 如何在运行时测试哪个 COM coclass 用于实例化接口?
【发布时间】:2011-03-21 21:13:53
【问题描述】:

假设您有一个 COM 接口 ICOMInterface,它由 coclasses Coclass1Coclass2 实现。这些 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"

如果我测试的是接口而不是 coclass,这将起作用,但这些 coclass 除了它们都实现的接口之外没有其他接口,ICOMInterface

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

感谢您的帮助!

【问题讨论】:

    标签: c# com interface


    【解决方案1】:

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

    请看这里:C# Get progID from COM object

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-01
      • 1970-01-01
      • 2013-02-26
      • 1970-01-01
      • 2012-09-20
      • 1970-01-01
      • 2014-06-16
      相关资源
      最近更新 更多