【问题标题】:how do you pass a C# COM interropt DLL as param in vb6如何在 vb6 中将 C# COM interropt DLL 作为参数传递
【发布时间】:2016-04-01 15:50:43
【问题描述】:

我有一个 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)

当我尝试让智能感知向我展示可供我使用的选项时..
它现在确实将 pfileObj 识别为我可以使用的变量,它不会出现在智能感知中
如果我尝试手动输入,intellisense 将再次不会显示任何选项。

pfileObj.

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

【问题讨论】:

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


    【解决方案1】:

    原因是您需要让 .NET 创建一个 TypeLib 文件,然后您可以从 VB6 中引用该文件。 VB6 将使用它来显示智能感知以及协助 VB6 如何调用您的 C# 对象。你需要做以下几件事:

    1. 在 C# 中声明一个接口,该接口将公开公开您希望 VB6 访问的属性/方法。
    2. 在 C# 对象中使用类名后的冒号字符实现接口。
    3. 使用强名称命令行实用程序为您的项目创建一个强名称。 (您可以在 Visual Studio .NET 的项目属性中执行此操作)。
    4. 使用命令行实用程序 regasm.exe 创建必要的 TypeLib 文件。
    5. 使用 gacutil 将新创建的 tlb 文件添加到 GAC。
    6. 从 VB6 创建对新创建的 .tlb 文件的引用(项目 > 引用)。

    您可以在此处找到详细说明:http://www.codeproject.com/Articles/3511/Exposing-NET-Components-to-COM。这篇文章可能很旧,但在大多数情况下它仍然适用于 Visual Studio 的现代版本。

    【讨论】:

      猜你喜欢
      • 2010-11-20
      • 2012-10-22
      • 1970-01-01
      • 2019-04-29
      • 1970-01-01
      • 2012-07-13
      • 2012-08-21
      • 2016-06-26
      • 1970-01-01
      相关资源
      最近更新 更多