【问题标题】:I want to use a VB.NET dll in a VB6 program. Is it possible?我想在 VB6 程序中使用 VB.NET dll。可能吗?
【发布时间】:2011-01-16 06:26:10
【问题描述】:

在 VB6 程序中使用 VB.NET dll 时遇到问题。我已经使用 GuidAttribute 创建了我的 dll,使用 RegAsm 创建了一个 tlb 并将其添加到我的 VB6 程序的引用中。问题是当我尝试使用 CreateObject 函数创建对象时,出现以下错误“ActiveX 组件无法创建对象。”

我不知道我是否在 VB.NET 上遗漏了将其用作 dll 的任何声明,或者我是否没有正确使用 CreateObject 函数。

【问题讨论】:

  • 我的补充:如果我设置“使 COM 可见”,然后在 VB6 中使用 dll,可以吗?

标签: vb.net dll vb6


【解决方案1】:

关于从 Visual Basic 6 调用 .Net 类的完整文章: http://www.devsource.com/c/a/Using-VS/Calling-Net-Classes-from-Visual-Basic-6/

使用 VS 2005 创建 COM DLL:演练: http://www.codeproject.com/KB/COM/VS2005ComDllWalkThru.aspx

【讨论】:

【解决方案2】:

很难用您提供的信息说,但听起来您没有找到该程序集。来自MSDN

在 HKCR\CLSID{0000…0000} 键下, 默认值设置为 ProgID 类的,还有两个新命名的 添加了值、类和程序集。 运行时读取程序集值 从注册表并将其传递给 运行时程序集解析器。这 程序集解析器尝试定位 装配,基于装配 姓名等信息 版本号。对于大会 解析器来定位程序集, 大会必须在其中之一 以下位置:

全局程序集缓存(必须是 强命名程序集)。

在应用程序目录中。 从应用程序加载的程序集 路径只能从中访问 应用。

沿着使用指定的文件路径 Regasm.exe 的 /codebase 选项。

【讨论】:

    【解决方案3】:

    您必须确保您的组件已为 com interop 正确注册。在项目属性选项卡中,有一个用于启用此功能的复选框选项,您实际上是在正确的路径上创建可以在 vb6 中引用的类型库,您可以像任何其他组件一样简单地添加对它的引用。但是实际注册它而不是创建一个 tlb 文件。

    当您注册一个供 COM 使用的程序集时,Regasm.exe 会将条目添加到本地计算机上的注册表中。更具体地说,它创建与版本相关的注册表项,允许同一程序集的多个版本在计算机上并行运行。第一次注册程序集时,会为程序集创建一个顶级密钥,并为特定版本创建一个唯一的子密钥。每次注册程序集的新版本时,Regasm.exe 都会为新版本创建一个子项。

    使用 Regasm.exe 注册程序集后,您可以将其安装在全局程序集缓存中,以便可以从任何 COM 客户端激活它。如果程序集仅由单个应用程序激活,您可以将其放在该应用程序的目录中。

    如果您对该工具为注册表生成的内容感兴趣

    regasm {您的程序集的路径}.dll /regfile:myTest.reg

    【讨论】:

      猜你喜欢
      • 2014-04-19
      • 2021-12-27
      • 2012-10-06
      • 2012-08-10
      • 1970-01-01
      • 1970-01-01
      • 2012-09-10
      • 1970-01-01
      • 2018-10-14
      相关资源
      最近更新 更多