我需要在非托管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)