在VB6应用程序中使用.NET dll

4

我用C#.NET编写了一个DLL,它在应用程序中调用另一个第三方.NET DLL。当我使用下面的代码在同样用C#.NET编写的控制台应用程序中进行测试时,它能够正常工作:

 Assembly u = Assembly.LoadFrom(dllLocation);
 Type t = u.GetType("MyLIB.CLass");
 MethodInfo m = t.GetMethod("Method");
 object[] myparam = new object[1];
 myparam[0] = fileLocation;
 result = (string)m.Invoke(null, myparam);

请注意,一些文件也是通过在最初加载dll的位置上加载来使用的:
  string path = Assembly.GetExecutingAssembly().Location;
  path = Path.GetDirectoryName(path);

但问题在于,当我尝试使用VB6来调用它时,出现了一个错误,指出无法加载第三方dll。请帮忙,因为我似乎不知道发生了什么。


确切的错误是什么?你是否检查过它是否在正确的位置查找? - MarkJ
具体错误是“找不到第三方dll或其中一个依赖项丢失”。请问我如何检查VB6是否正在当前位置查找? - Jay
看起来你需要与提供第三方dll的供应商核实,并要求COM互操作支持。 - Turbot
2个回答

6

为了使 .NET 程序集暴露给 COM,你需要生成 tbl - type library

使用命令 RegAsm /tlb: MyLIB.tlb MyLIB.dll 进行生成。

有一些指南可以帮助你将 .NET 类型暴露给 COM 并确保你能够应对它们,例如声明 ComVisibleAttribute,需要一个公共的默认构造函数才能向 COM 可见,这些都在

你可以在以下链接中进行参考: 如何从 Visual Basic 6.0 调用 Visual Basic .NET 或 Visual Basic 2005 程序集


我已将必要的ComVisibleAttribute属性设置为true,生成了类型库并注册了程序集,但请注意我的.NET dll引用了第三方dll。这就是错误出现的地方,但我无法为第三方dll指定ComVisibleAttribute属性。有其他解决方法吗? - Jay
您已将此标记为答案,但您的评论表明您想要VB6代码直接访问第三方DLL。只是确认这是不可能的,但您始终可以在您有控制权的DLL中添加带有“ComVisibleAttribute”的代码,以直接将调用传递给第三方DLL。 - Mark Hurd
在这种情况下,您无法直接访问.NET Dll引用,但是您可以创建接口并在.NET类中显式实现它们,并为您的VB6引用生成COM互操作。我发布的链接提供了“指南”。 - Turbot

3

我已将必要的ComVisibleAttribute属性设置为true,但请注意我的.NET dll引用了第三方dll。这就是错误出现的地方,但我无法为第三方dll指定ComVisibleAttribute属性。有其他解决方法吗? - Jay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接