我在 A.idl 文件中定义我的接口,我将其编译为 A.tlb
在 VS2005 ATL 项目“B”中,我在 B.idl 中使用 importlib(A.tlb),在 stdafx.h 中使用 #import“A.tlb”,并在 ATL COM 类中从 A.tlb 实现接口 IA。该项目输出一个 B.dll 和一个 B.tlb
我将 B.tlb 添加到 C# 应用程序的引用中,并在代码中实例化 COM 对象。
如果我使用任何一个,实例化工作没有问题
Type.GetTypeFromCLSID(); Activator.CreateInstance(...);
或者
[DllImport("ole32.dll", ...)] CoCreateInstance(...)
两者都工作正常,对象实例化,我可以将其转换为 A.tlb 中定义的 IA 接口(实际上是从 tlb 生成的 RCW)并调用其方法。仍然没有问题。
然后我使用 OLEView 使用默认的 DllHost.exe 代理启用 COM 对象激活。
代理中 COM 对象的实例化(CoCreateInstance 中的参数 CLSCTX_LOCAL_SERVER)仍然没有问题,但是当我尝试将对象强制转换为 A.tlb 中定义的 IA 接口时,我得到 E_NOINTERFACE和一条消息说 QueryInterface 失败,因为“没有这样的支持接口”。
请帮忙。有什么问题?如果您需要任何其他信息,我会尽量提供。