2012-04-19 148 views
0

我正在VB.NET 2010中编写一个COM DLL(我们称之为DLL A)。此DLL使用预先存在的DLL(DLL B)中的函数。当我在VS2010中运行测试应用程序的代码时,一切都很好。VB.NET调用COM DLL调用另一个COM DLL的错误

(测试应用程序) - >(DLL A) - >(DLL B)

现在我在真正的应用程序添加到DLL中的一个引用(在VB6)

(真正的应用程序) - >(DLL A) - >(DLL B)

...我得到这个错误

无法投型 '系统.__ ComObject' 的COM对象接口典型 'Object.class' 。此操作失败,因为具有IID“{GUID}”的接口的COM组件上的QueryInterface调用由于以下错误而失败:没有支持此接口(来自HRESULT的异常:0x80004002(E_NOINTERFACE))。

DLL A不会被初始化,但只要我调用一个引用DLL B的函数,它就会出错。

帮助!

+0

您是使用x86/x64还是两者兼备? – rekire 2012-04-19 15:32:48

+0

DLL B也基于.NET还是老派的COM? – rskar 2012-04-19 16:28:46

回答

1

当您部署.NET DLL并希望将其与COM(VB6)结合使用时,您需要在组件中使用“RegASM”进行注册。注册非GAC文件夹时,您必须包含/ codebase开关。

使用/ codebase开关,它必须是强名称程序集。

+0

+1,因为需要注册RegAsm。但是除非你把它放在GAC中(通常作为主要的互操作程序集),否则你不需要给它一个强名。如果您将dll作为专用程序集部署以供您的应用程序使用,请使用RegAsm/codebase并忽略有关签名的警告。 – tcarvin 2012-04-20 13:05:36