从 .NET 程序集创建对象时,VB6 中出现后期绑定运行时错误

2023-11-23

我有一个 vb6 项目,其中引用了 vb.net com 库。

当我使用早期绑定时,该项目运行良好,例如:

Dim b as object
Set b = new myComLib.testObject

当我使用后期绑定时,例如:

Dim b as object
Set b = CreateObject("myComLib.testObject")

我收到以下错误:

运行时错误“429”:ActiveX 组件无法创建对象

有任何想法吗?

thanks


在这种情况下,.NET COM Interop 类的注册表项是:-

HKEY_CLASSES_ROOT\myComLib.testObject 

包含 CLSID 值和 CLSID 条目本身

HKEY_CLASSES_ROOT\CLSID\<<myComLib.testObject\CLSID value>>

它们也被复制到

HKEY_LOCAL_MACHINE\SOFTWARE\Classes

CreateObject 使用 HKEY_CLASSES_ROOT 条目来检索传入的类名的详细信息,因此如果它们丢失,您将收到

运行时错误“429”:ActiveX 组件无法创建对象

在 VB6 IDE 中,添加对 dll 的引用(对于 .NET 程序集,通过其 tlb 文件)会绕过此注册表搜索,从而允许早期绑定在没有 COM 注册表项的情况下工作。

必须正确注册该类,CreateObject 才能工作。这应该作为 Visual Studio 构建过程的一部分发生,否则需要使用 Regasm 手动注册。

您可以通过执行以下操作来测试此行为:-

1)创建一个新的VB.NET项目myComLib,在项目中注册COM Interop编译属性并添加一个类testObject

Public Class testObject

    Public Property TestProperty As String

    Public Function TestFunction() As String
        Return "return"
    End Function

End Class

2)构建myComLib

3)新建一个VB6项目,在Form1中添加两个命令按钮并添加以下代码

Private Sub Command1_Click()
   Dim b As Object
   Set b = New myComLib.testObject
   b.TestProperty = "Hello"
   MsgBox b.TestProperty, vbOKOnly, b.TestFunction()
End Sub

Private Sub Command2_Click()
   Dim b As Object
   Set b = CreateObject("myComLib.testObject")
   b.TestProperty = "Hello"
   MsgBox b.TestProperty, vbOKOnly, b.TestFunction()
End Sub

4)运行VB6项目(没有完全编译,否则会失败)

Command2 将弹出一个消息框,Command1 将失败并显示

编译错误:用户定义类型未定义。

5) 停止项目并通过其 tlb 文件添加对 myComLib 的引用

6) 运行 VB6 项目,两个按钮现在都应该可以工作了

7) 进入注册表并删除 HKEY_CLASSES_ROOT\myComLib.testObject 条目(这可以通过重建 .NET 组件来重新创建,您需要关闭 VB6 来执行重建)

Command2 现在将失败并显示

运行时错误“429”:ActiveX 组件无法创建对象

直到重新添加注册表项。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 .NET 程序集创建对象时,VB6 中出现后期绑定运行时错误 的相关文章

  • 将字符缓冲区从 .NET 传递到 COM 并获取更新

    我有从 C 调用以下 COM 方法 该方法在提供的缓冲区中返回一个字符串pchText 这是not必须以零结尾 和复制的字符数pcch HRESULT Next in out long pcch out size is pcch OLECH
  • 将 ActiveX Com 组件与 Node.js 一起使用。是否可以

    有没有办法将任何ActiveX com组件与nodejs一起使用 实际上 我永远不需要这个 但我在 Windows 上运行 nodejs 并尝试发送 ping 请求而不分叉新进程 Windows 不存在这样的模块 由于存在一些 Active
  • ActiveX 无法在客户端计算机上运行

    我正在尝试为一个简单的 hello world 消息框运行 activex 控件 首先 我创建了类库 现在有了 dll 然后我创建了 HTML 页面并调用了 activeX 控件
  • AxAcroPDF - Vista64 类未注册错误

    我们有一个用 C 编写的 WinForms 应用程序 它使用 AxAcroPDFLib AxAcroPDF 组件来加载和打印 PDF 文件 在 Windows XP 下一直运行没有任何问题 我已将开发环境移至 Vista 64 位 现在除非
  • 如何检查 ActiveX dll 是否已注册?

    我有一个正在注册多个 dll 的安装程序 需要知道这是否成功 这似乎对我有用 http www nirsoft net utils registered dll view html http www nirsoft net utils re
  • C# - 挂钩现有 COM 对象

    假设我们有一个现有进程 或应用程序 它从 ocx 文件 例如 MyCOMLibrary ocx 调用 COM 对象 有没有办法编写一个 C 库来精确复制 ocx 文件 这样原始应用程序就可以调用您的 C 代码而不是原始 COM 对象 当然
  • 我刚刚在 Visual Basic 中运行的 COM 对象的 CLSID 是什么

    我需要知道我刚刚运行的 COM 对象的 CLSIDCreateObject xxx xxx 我怎么才能得到它 蒂亚 拉法尔 我认为您无法直接从 VB 本身获取该信息 例如 作为调用的副作用或次要结果 CreateObject 但你可以阅读注
  • 我应该选择哪个 VC++ 运行时版本 - 静态还是动态?

    我正在开发一个 64 位进程内 VC ATL COM 服务器 它基本上只是将所有调用重定向到进程外 COM 服务器 所以我的COM服务器基本上什么都不做 最初它在 DLL 中使用 C 运行时 MD编译器开关 我注意到当我在干净的 64 位
  • 有没有办法将消息从 C#.NET 程序集(ActiveX)发送到 VB6 应用程序?

    本问答参考并可用于以下用途 目的 通过ActiveX dll从IE浏览器发送消息到vb6应用程序 从 ActiveX dll 向 vb6 应用程序发送消息 从 C net dll 发送消息到 vb6 应用程序 我读过了本文 http www
  • 如何防止在 ActiveX 方法调用期间重新进入 WPF 事件处理程序?

    我们从 WPF 和 STA 应用程序中调用 ActiveX 组件上的方法 此调用是通过以下方式后期绑定执行的 res ocx GetType InvokeMember methodName flags null ocx args 其中 oc
  • OleLoadPicturePath 是否已以非向后兼容的方式更改?

    我最近遇到一个问题 我能够在一台 PC 上将图标添加到 VB6 表单 它运行良好 但他们无法在第二台 PC 上运行 编译它 结果发现图标文件是 32 位的 包括 Alpha 通道 这就是问题所在 但令我惊讶的是 这是一个依赖于系统的功能 在
  • vb6 中双精度计算的值不正确

    当在 vb6 中添加 2 个值时 我得到一些奇怪的行为 当在立即窗口中针对不同情况打印变量 sum 双精度型 时 如下所示 我得到的结果为 sum 0 sum 0 sum 0 sum 74 46 0 41 sum 74 87 sum 97
  • 为什么我的 DLL 无法注册?

    我正在 VS2005 中构建一个项目 但我的几个 DLL 无法注册 我在 Visual Studio 中收到的错误消息是 项目 错误 PRJ0019 工具从 注册 ActiveX 控件 返回错误代码 这很模糊 当我通过命令行手动注册DLL时
  • 如何在 Javascript 中连接 C# ActiveX 事件处理程序

    我尝试使用几个代码片段将 ActiveX 对象与 Javascript 事件处理程序挂钩 我无法确定为什么事件处理程序没有被调用 带有项目的 Github 存储库 https github com JesseKPhillips Csharp
  • ReDim 保留“下标超出范围”

    我正在尝试将数据从 2 个双精度数组移动到 2 个不同的双精度数组 我不确定大小是多少 因为我正在从第一个数组中随机抽取样本并将其放入第二个数组中 当我添加 ReDim Preserve 行时 出现下标超出范围错误 Function Cre
  • 如何构建具有 64 位 COM 互操作的 64 位 .NET DLL?

    我需要构建一个针对 x64 的托管 DLL 并通过 x64 COM 公开它 我需要一个演练 好文章等等 互操作相当简单 但是当你谈论双方的x64时 我找不到任何东西 看一眼这次讨论 http bytes com forum thread58
  • COM+ 应用程序死锁故障排除

    我正在尝试对间歇性死锁的 COM 应用程序进行故障排除 上次锁定时 我能够获取 dllhost 进程的用户模式转储并使用 WinDbg 对其进行分析 检查完所有线程和锁后 一切都归结为该线程拥有的关键部分 ChildEBP RetAddr
  • 如何使用 VB6 调用 Windows shell 命令?

    究竟如何使用 VB6 才能像从命令行一样调用任何 Windows shell 命令 例如 一些微不足道的事情 echo foo 操作方法如下 Shell cmd echo foo vbNormalFocus
  • Windows 7 下 VB 6 中的“用户定义类型未定义”错误

    我使用的是 Windows 7 我的项目是 VB 6 0 我在执行程序时遇到错误 它显示错误 未定义用户定义类型 这是我的代码 Private Sub Toolbar1 ButtonClick ByVal Button As MSComct
  • 在 C++ 中不使用 CLSID 和注册表即可获取 COM 对象的 DLL 文件

    是否可以在不使用 CLSID 和注册表查找的情况下获取已加载 COM 对象的 DLL 文件名 我有一个IUnknown或者就我而言IBaseFilter接口指针 现在我想获取创建此 COM 对象的 DLL 文件名 我可以使用对象点地址来反向

随机推荐

  • 我正在使用 Python urllib2 下载文件。如何查看文件大小有多大?

    如果它很大 那么停止下载 我不想下载大于 12MB 的文件 request urllib2 Request ep url request add header User Agent random choice agents thefile
  • R中按行号分割数据帧

    这可能非常简单 但我找不到解决方案 df lt data frame replicate 10 sample 0 1 10 rep TRUE v lt c 3 7 有没有一种优雅的方法可以在 v 中指定的行号处将此数据帧拆分为 列表的 三个
  • 将大小为编译时常量的数组初始化为单个值

    我有一个 c 风格的数组 其大小由 a 定义 define并且可以根据编译选项进行更改 例如 if LINUX define SIZE 4 else define SIZE 5 endif static int myArr SIZE 如何将
  • Reader和InputStream有什么区别?

    Reader和InputStream有什么区别 以及何时使用什么 如果我可以使用 Reader 来读取字符 为什么我会使用 inputstream 我想读取对象 InputStream 是从资源获取信息的原始方法 它逐字节抓取数据 而不执行
  • 指针初始化为什么?

    有件事总是让我困惑 那就是字符指针 四年后 我再次徘徊在 c 语言上 以上述案例为例 为什么char指针的行为是这样的 当指针指向任何内容时 我们如何直接寻址指针的内容 或者就像 char 指针存储地址以外的东西一样 include
  • 编写 Iron Python 调试器

    作为学习练习 我正在使用 IronPython 为自己编写一个简单的扩展 插件 宏框架 我已经掌握了基础知识 但我想添加一些基本的调试支持 以使我的脚本编辑器更易于使用 我在互联网上搜索了一下 发现了一些关于编写托管调试器的好资源 包括 M
  • 在 C 中用零覆盖整个文件的最快方法是什么?

    我需要做的是以最快的方式将整个文件内容用零填充 我知道一些Linux命令 比如cp实际上得到一次写入的最佳块大小信息是多少 但我无法弄清楚使用此块大小信息是否足以获得良好的性能并且看起来像st blksize来自stat 没有给我那个块大小
  • Haskell do 符号绑定

    我正在尝试对 Haskell 中的 do 语句进行脱糖处理 我在这里找到了一些例子 但无法将它们应用到我的案例中 我唯一能想到的是一个沉重的嵌套 let 语句 这看起来很丑陋 其中 do 表示法应替换为 bind 的语句 do num lt
  • 更改窗口的消息循环线程

    最近我尝试将窗口的消息循环放在它自己的线程中 我想知道为什么它从未收到任何消息 但我了解到Windows将消息发送到创建窗口的线程 如何在一个线程中创建一个窗口并使另一个线程接收该窗口的消息 我已经看到了 PostThreadMessage
  • 孩子在平面结构多模块maven构建中找不到父pom

    我正在设置一个具有扁平结构的多模块项目 即父级和子级位于同一基目录中 父级定义为
  • 为什么无法在升级中更改放置限制?

    我的 Azure Service Fabric 群集中运行着无状态 ASP NET Core RC1 服务 它具有以下清单
  • 更新 knex 迁移中的枚举列类型

    我正在寻找编写一个迁移字符串以将新字符串添加到枚举列类型 我正在尝试添加gamma to the service column 我尝试使用下面的代码 这会发生冲突 因为表和列已经存在 const table user association
  • 具有相同案例名称和不同类型关联值的枚举

    以下 Swift 代码可编译 enum GraphDataSource case array data Double start Double step Double case pairs XYValues Double Double ca
  • Python脚本运行方式的差异

    我有一个非常简单的 Python 问题 其中包含使用 Django 的示例 运行 Python 脚本时 我是否总是必须在脚本文件名前面加上python命令 在我关注的Django教程中 一些命令如下 django admin py star
  • 如何监听“props”的变化

    In the VueJs 2 0 文档我找不到任何可以监听的钩子props变化 VueJs 有这样的钩子吗 onPropsUpdated 或类似的 Update 正如 wostex所建议的 我尝试watch我的财产 但没有任何改变 然后我意
  • 在 Rails 外部生成迁移

    我在 Rails 之外使用 ActiveRecord 我想要一个程序来生成迁移的框架 以及一个收集和维护它们的系统 有人可以提出建议吗 也来看看新品活动记录迁移
  • 两个日期之间的月份函数

    在oracle中 我可以找出使用MONTHS BETWEEN函数之间的月份数 在 postgres 中 我为此使用 extract 函数 例如 像 select extract year from age current date 2012
  • PHP和Mysql中实现哈希表的步骤

    我是编程语言新手 我正在使用 PHP 和 mysql 我收到一个用 php 做哈希表的作业 我需要做的是 存储用户收集的项目 然后显示它 在网上做了一些研究后 我将在实现哈希表时执行以下步骤 如果我错了 请纠正我 设置表格 gt 用户表 u
  • 使用反射覆盖私有方法

    NET 3 5 中是否可以使用 Reflection 重写私有方法 嗯 它需要是virtual可以覆盖它 通过编写从该类继承的动态类型 并且您不能拥有private virtual 这个不成立 你也许可以重写internal virtual
  • 从 .NET 程序集创建对象时,VB6 中出现后期绑定运行时错误

    我有一个 vb6 项目 其中引用了 vb net com 库 当我使用早期绑定时 该项目运行良好 例如 Dim b as object Set b new myComLib testObject 当我使用后期绑定时 例如 Dim b as