我在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对象激活。
在代理(CoCreateInstance中的参数CLSCTX_LOCAL_SERVER)中COM对象的实例化仍然没有问题,但是当我尝试将对象强制转换为A.tlb中定义的IA接口时我收到E_NOINTERFACE ,并显示一条消息,说QueryInterface失败,因为“没有支持这样的接口”。
请帮忙。可能有什么不对?如果您需要任何其他信息,我会尝试提供尽可能多的信息。