C# 参考C中工作线程中的COM对象#
我有一个COM对象序列接口objCANinterface;它是在VC++6.0 ATL中创建的 我能够从我的C#GUI中成功地调用这些方法 但是我已经创建了一个线程,它必须使用这个线程中打开的对象来继续这个过程 因此,我在构造函数类中添加了以下语句C# 参考C中工作线程中的COM对象#,c#,multithreading,object,com,call,C#,Multithreading,Object,Com,Call,我有一个COM对象序列接口objCANinterface;它是在VC++6.0 ATL中创建的 我能够从我的C#GUI中成功地调用这些方法 但是我已经创建了一个线程,它必须使用这个线程中打开的对象来继续这个过程 因此,我在构造函数类中添加了以下语句 public MyClass() { // Start the thread with a ParameterizedThreadStart. ParameterizedThreadStart start =
public MyClass()
{
// Start the thread with a ParameterizedThreadStart.
ParameterizedThreadStart start = new ParameterizedThreadStart(callBackLoad);
threadFlash = new Thread(start);
threadFlash.SetApartmentState(ApartmentState.STA);
...
}
void myFun()
{
threadFlash.Start(objCANinterface);
threadFlash.Join(); //Wai
}
[STAThread]
public void callBackLoad(object refinterface)
{
//I am not able to access objCANinterface inside my thread so i have passed the object as a parameter and trying to cast
SerInterface objSrinterface = (SerInterface)refinterface;
}
这是不成功的,请让我们知道我如何解决这个问题。我得到以下错误
MyClass.exe中发生类型为“System.InvalidCastException”的未处理异常
其他信息:无法将“System.\u ComObject”类型的COM对象强制转换为接口类型“MYINTERFACELib.SerInterface”。此操作失败,因为对具有IID“{37C34F3C-0082-46F5-9974-37CEB2E1C2EE}”的接口的COM组件的QueryInterface调用由于以下错误而失败:加载类型库/DLL时出错。(来自HRESULT的异常:0x80029C4A(类型为E)
请让我知道如何解决这个问题。提前谢谢
@奥伯弗雷克。。。。。。。。。
你也试过用“as”吗?如果您使用调试器下台,它是哪种类型,它是预期的类型吗?您的互操作包含在程序集中还是单独的文件中
@oberfreak,我怎么用“As”,你能告诉我怎么用吗。我的互操作包括在我的exe中。我能很好地解决这个问题
@汉斯·帕桑:
您忘记在.rgs脚本中注册类型库,也没有创建代理/存根项目。当对象在STA线程上创建并在另一个STA线程上使用时,两者的线程模型仍然需要对其进行封送处理。这使得创建新线程变得毫无意义。通过在辅助线程上创建对象来获得成功
@汉斯·帕桑:我已经注册了我的类型库,并且在C#代码中创建了互操作,这使得我可以在我的C#代码中使用。我无法创建新对象,因为我需要使用相同的对象来继续执行CAN序列命令。请您提供一些样本,以便更好地在线程内部进行编组 我已从Exe中注销/删除引用,并已注册并将引用添加回工具。然后使用参数threadpassing作为STA线程。感谢您提出的答案。您是否也使用了“as”进行了尝试?如果您使用调试器下台,它是哪种类型,它是预期的类型吗?您的互操作包含在程序集中还是单独的文件中?您忘记在.rgs脚本中注册类型库,并且您也没有创建代理/存根项目。当对象在STA线程上创建并在另一个STA线程上使用时,两者的线程模型仍然需要对其进行封送处理。这使得创建新线程变得毫无意义。通过在辅助线程上创建对象来获得成功。