繁体   English   中英

问题参考COM组装DLL

[英]Problem reference a com assembly dll

我有个问题。 当我在C#应用程序中导入COM dll(VB6)时,一切正常。 它可以编译和工作。

但是,当我在另一台PC上使用该应用程序时,出现错误消息:

无法将对象强制转换为COM类型Installation.VB6FenetreClass Installation._VB6Fenetre接口类型。 此操作失败,因为对IID为{4CD38B1B-45F1-4DC5-910E-3579664306B9}的接口的COM组件上的QueryInterface调用由于以下错误而失败:不支持此接口(BingTranslated)

但是我不明白为什么。

欢迎来到DLL地狱。 您要测试的计算机上注册的版本与您要开发的计算机上的版本不同(或具有不同的GUID)。

这是DLL Hell的相当经典的标志。 修改代码后,VB6会生成新的接口IID。 目标PC上的COM服务器可能与您针对其构建程序的COM服务器版本不同。

终于我找到了问题所在。 汉斯和查克,你是对的,问题是我的VB6 DLL没有被引用。

当我编译VB6 DLL时,Visual Basic 6.0在注册表库中自动注册了我的DLL(之前我没有注意到的事情)。

在Visual Studio 2005中,我没有看到对我的VB6 DLL的引用,因为当我引用它时,VS会生成另一个DLL(如果我的DLL名称是MYDLL,则VS会生成一个Interop.MYDLL.dll)。

因此,我认为在Interop.MYDLL.dll上只有一个引用,而没有对MYDLL.dll的引用。

因此,我们必须在客户端计算机上复制VB6 DLL,.NET DLL。 然后,我们必须使用以下命令注册VB6 DLL:

regsvr32 MYDLL.DLL

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM