VB6调用VB.NET调用第三方COM DLL错误

时间:2018-04-19 16:15:38

标签: vb.net com vb6 interop vb6-migration

我在VB6中有一个EXE,它调用最近升级到VB.Net的DLL。这部分工作正常,但我遇到的问题与定位VB.Net DLL引用的另一个COM DLL的互操作有关。

概述:EXE(VB6)调用DLL(VB.Net)的方法A,没有问题。 DLL的方法A调用第三方DLL(COM)的方法B,它得到一个错误,无法找到COM DLL的互操作文件。

我已经使用测试用户界面在VB.Net中直接测试,在VB.Net DLL中调用相同的方法A,一切正常。我目前对导致问题的原因感到茫然。

谢谢, 克里斯

1 个答案:

答案 0 :(得分:5)

我终于找到了问题的答案。所有的说法和完成,问题是互操作程序集是框架版本4.0而不是框架版本2.0。 Visual Studio出于某种原因以这种方式创建它们,所以我不得不使用Visual Studio 2008来创建它们的新版本。

找到这个的过程(其中大部分内容已经在上面说过,但在这里重复有用)是将我所有的VB.NET dll和interop程序集dll放在VB6 exe的目录中。 (我为每个子文件夹创建了子文件夹,以便以后更容易清理。)这仍然导致相同的错误,但是程序集生成器日志显示了错误的不同原因。这次它能够毫无问题地加载组件,但无法完成组件的设置。

研究这个让我想到使用ILSpy检查互操作程序集的框架版本,以找出它们是版本4.0而我的dll是版本2.0。

最初我尝试在Visual Studio 2017中重新创建它们,因为我的项目使用框架2.0,但由于某些原因它仍然将它们创建为框架4.0。然后我尝试在Visual Studio 2008中,它能够创建正确的框架2.0版本的互操作程序集,现在一切都按预期工作。