COM服务器的托管客户端抛出InvalidCastException

时间:2010-02-01 16:21:22

标签: com-interop

我注册了我非常简单的本机COM服务器,我的本机COM客户端可以成功调用COM方法。但是,我的托管COM客户端抛出了以下错误:

无法将“DevicesLib.MyComClass”类型的COM对象强制转换为接口类型“DevicesLib.IMyComInterface”。此操作失败,因为对于具有IID“{503DDA5C-F8A2-4273-810F-3855EE0F2B78}”的接口的COM组件的QueryInterface调用由于以下错误而失败:不支持此类接口(HRESULT异常:0x80004002(E_NOINTERFACE))

我使用tlbimp.exe生成一个延迟签名的interop dll。我的操作系统是64位Windows Server 2008 R2。

有什么想法吗?

由于 利昂

2 个答案:

答案 0 :(得分:1)

在为main()装饰[STAThreadAttribute]之后,它有效。

答案 1 :(得分:1)

您的界面不得注册以进行封送处理。您的CoClass可能已注册为要求STA。没有STAThreadAttribute,主线程是MTA。创建COM对象会将其置于不同的STA线程中,然后尝试将接口指针封送回给您。