小编dli*_*dli的帖子

在C#中加载COM对象抛出异常"无法将类型为'System .__ ComObject'的COM对象转换为接口类型...",但C++或VB没有

我需要在非托管C++中使用COM服务器,在C#中使用COM客户端.我在C++中找到了COM Hello World世界(http://antonio.cz/static/com/5.html).Page是捷克语.COM服务器在IHello接口调用函数Print()之后显示带有文本"Hello world"的MessageBox.源代码在这里:http://antonio.cz/static/com/Hello.zip.该存档包含C++中COM服务器和COM客户端的源代码,它可以工作.

但我的C#COM客户端不起作用.它是一个C#控制台应用程序,引用了"Interop.Hello.dll".我使用命令制作interop dll:

tlbimp Hello.tlb /out:Interop.Hello.dll
Run Code Online (Sandbox Code Playgroud)

C#代码:

static void Main(string[] args)
{
    Interop.Hello.IHello Hello = new Interop.Hello.CHello();
    Hello.Print();
}
Run Code Online (Sandbox Code Playgroud)

但是C#客户端抛出异常:

Unable to cast COM object of type 'System.__ComObject' to interface type
'Interop.Hello.CHello'. This operation failed because the QueryInterface call on the
COM component for the interface with IID '{B58DF060-EAD9-11D7-BB81-000475BB5B75}' 
failed due to the following error: No such interface supported (Exception from 
HRESULT: 0x80004002 (E_NOINTERFACE)).
Run Code Online (Sandbox Code Playgroud)

我也试过从Visual Basic加载COM服务器.它有效.我在VB中使用"Interop.Hello.dll"进行了控制台应用程序.

VB代码:

Module Module1
    Sub Main() …
Run Code Online (Sandbox Code Playgroud)

c# c++ com com-interop

4
推荐指数
1
解决办法
2444
查看次数

标签 统计

c# ×1

c++ ×1

com ×1

com-interop ×1