问题引用了一个com程序集dll

时间:2010-10-04 17:39:05

标签: c# com reference

我有问题。当我在我的C#应用​​程序中导入COM DLL(VB6)时,一切都很好。它编译和工作。

但是,当我在其他PC上使用该应用程序时,我收到一条错误消息:

  

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

但我不明白为什么。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

最后我发现了问题。汉斯和查克你是对的,问题是我的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