如何在vb6中将C#COM interropt DLL作为参数传递

时间:2016-04-01 15:50:44

标签: c# .net c#-4.0 vb6 vb6-migration

我有一个C#DLL,它被用作一个类来包含一个关于文件的属性列表 C#DLL是COM可见的,可以在VB6中声明和实例化 在我的vb6函数里面,我创建了对象..

Dim fileObj As New MyCSharpClass.FileProperties

我可以立即看到C#FileProperties对象可以访问的所有不同属性 fileObj。(intellisense)显示对象内可用的任何内容的下拉列表 但是当我将对象传递给函数时..

GetProperties(fileObj)

当我在GetProperties内部时

Public Function GetProperties(ByRef pfileObj As MyCSharpClass.FileProperties)

当我试图让intellisense向我展示我可以使用的选项时..
它现在确认pfileObj是我可以使用的变量,它不会出现在intellisense中 如果我尝试手动输入,再次intellisense将不会显示任何选项。

pfileObj.

有没有一种特殊的方法可以将COM interropt对象传递给它们在VB6内部未被删除的函数?
这根本不可能吗?
我试图避免创建返回字符串的函数,然后一次分配一个对象属性。

1 个答案:

答案 0 :(得分:0)

原因是因为您需要让.NET创建一个TypeLib文件,然后您可以从VB6引用该文件。 VB6将使用它来显示intellisense以及协助VB6如何调用您的C#对象。您需要执行以下操作:

  1. 在C#中声明一个接口,它将公开公开您希望VB6访问的属性/方法。
  2. 使用类名后面的冒号字符在C#对象中实现接口。
  3. 使用强名称命令行实用程序为项目创建强名称。 (您可以在Visual Studio .NET的项目属性中执行此操作。)
  4. 使用命令行实用程序regasm.exe创建必要的TypeLib文件。
  5. 使用gacutil将新创建的tlb文件添加到GAC。
  6. 从VB6(Project> References)创建对新创建的.tlb文件的引用。
  7. 您可以在此处找到详细说明:http://www.codeproject.com/Articles/3511/Exposing-NET-Components-to-COM。这篇文章可能很旧,但大多数情况下它仍然适用于Visual Studio的现代版本。