C# 在VB6应用程序中使用.NETDLL

C# 在VB6应用程序中使用.NETDLL,c#,vb6,C#,Vb6,我在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]; mypara

我在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。请帮助我,因为我似乎不知道发生了什么。

您需要在程序集上指定,以便从VB6调用它。

我想给您提供更多详细信息,以便.NET程序集向COM公开

您需要生成
tbl类型库

使用
RegAsm/tlb:MyLIB.tlb MyLIB.dll

有一些准则可以向COM公开.NET类型,并确保您能够处理这些问题。 例如declareComVisibleAttribute,要求公共默认构造函数对COM可见,例如

你可以在

我已将必要的ComVisibleAttribute指定为true,但请记住,我的.NET dll引用了第三方dll。这就是错误的来源,但是我无法为第三方dll指定ComVisibleAttribute。还有其他方法吗?我已经将必需的ComVisibleAttribute指定为true,生成了类型库,还注册了程序集,但我记得我的.NET dll引用了第三方dll。这就是错误的来源,但是我无法为第三方dll指定ComVisibleAttribute。还有其他方法吗?您已将此标记为答案,但您的评论表明您希望VB6代码直接访问第三方DLL。仅确认这一点是不可能的,但您始终可以将带有
ComVisibleAttribute
的代码添加到您可以控制的DLL中,该DLL将调用直接传递到第三方DLL。在这种情况下,您无法直接访问.NET DLL引用,但可以创建接口并在.NET类中显式实现它们,并为VB6参考生成COM互操作。我发布的链接提供了
指南
。确切的错误是什么?您是否检查过它是否在正确的位置?确切的错误是“它找不到第三方dll或它的一个依赖项丢失”。请如何检查它是否在VB6中的当前位置?看起来您需要与向您提供第三方dll的供应商联系,并请求COM互操作支持。