Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用COM接口时System.InvalidCastException_C#_Com - Fatal编程技术网

C# 使用COM接口时System.InvalidCastException

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,这意味着它们只能由创建它

我写了一个atl COM dll,双。并在C#GUI项目中使用了它的一个IntreaceX。调用X.F()时,我得到一个System.InvalidCastException,无法将namespace.XClass强制转换为namespace.IX,QueryInterface失败:BADTYPE。这个电话是我自己打的

如果我将代码移动到GUI线程,它就可以正常工作


请帮帮我。非常感谢。

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

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

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

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

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