【问题标题】:System.InvalidCastException when using a COM interface使用 COM 接口时出现 System.InvalidCastException
【发布时间】:2010-01-05 11:55:31
【问题描述】:

我写了一个atl COM dll,对偶。并在 C# GUI 项目中使用了它的 intreace X 之一。当调用 X.F() 时,我得到一个 System.InvalidCastException,无法将 namespace.XClass 转换为 namespace.IX,QueryInterface 失败:BADTYPE。调用是在我自己的线程中。

如果我将代码移动到 GUI 线程,它工作得很好。

请帮帮我。非常感谢。

【问题讨论】:

    标签: c# com


    【解决方案1】:

    COM 对象通常是 STA,这意味着它们只能由创建它们的线程使用

    【讨论】:

    • 谢谢保罗。我确实在创建它的线程中使用了 COM obj。但不在 GUIthread 中。如果将所有代码移动到一个新线程,它就可以工作。
    • 严格来说 STA 对象也可以从其他线程中使用,但这需要编组接口指针。如果 COM 无法编组接口,您会看到问题中的错误指示。
    【解决方案2】:

    COM 需要一个代理/存根来编组从线程到创建对象的线程的调用。如果在 HKCR\Interface 注册表项中找不到它,QI 将失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-13
      • 1970-01-01
      • 2013-12-29
      • 1970-01-01
      • 2021-02-10
      • 2019-09-03
      • 1970-01-01
      相关资源
      最近更新 更多