C# 使用COM接口时System.InvalidCastException
我写了一个atl COM dll,双。并在C#GUI项目中使用了它的一个IntreaceX。调用X.F()时,我得到一个System.InvalidCastException,无法将namespace.XClass强制转换为namespace.IX,QueryInterface失败:BADTYPE。这个电话是我自己打的 如果我将代码移动到GUI线程,它就可以正常工作C# 使用COM接口时System.InvalidCastException,c#,com,C#,Com,我写了一个atl COM dll,双。并在C#GUI项目中使用了它的一个IntreaceX。调用X.F()时,我得到一个System.InvalidCastException,无法将namespace.XClass强制转换为namespace.IX,QueryInterface失败:BADTYPE。这个电话是我自己打的 如果我将代码移动到GUI线程,它就可以正常工作 请帮帮我。非常感谢。COM对象通常是STA,这意味着它们只能由创建它们的线程使用。COM对象通常是STA,这意味着它们只能由创建它
请帮帮我。非常感谢。COM对象通常是STA,这意味着它们只能由创建它们的线程使用。COM对象通常是STA,这意味着它们只能由创建它们的线程使用。COM需要代理/存根来封送从线程到创建对象的线程的调用。如果在HKCR\Interface注册表项中找不到QI,QI将失败。COM需要代理/存根来封送从线程到创建对象的线程的调用。如果在HKCR\Interface注册表项中找不到QI,QI将失败。谢谢。我确实在创建它的线程中使用了COM obj。但不是在吉他线程中。如果将所有代码移动到一个新线程,它就可以工作。严格来说,STA对象也可以从其他线程使用,但这需要编组接口指针。如果COM无法整理接口,您会看到问题中的错误指示。谢谢Paul。我确实在创建它的线程中使用了COM obj。但不是在吉他线程中。如果将所有代码移动到一个新线程,它就可以工作。严格来说,STA对象也可以从其他线程使用,但这需要编组接口指针。如果COM无法整理接口,您将看到问题中的错误指示。