VB6 Activex组件无法创建对象

标签 vb6 activex sql-server-2000 windows-server-2000

我正在对 VB6 应用程序进行一些小的更新。它在连接到 SQL Server 2000 数据库的 Windows 2000 服务器上运行。

我从服务器上获取了源代码的副本,进行了更新并在本地进行了编译。我的本地计算机运行的是 Windows 7 64x。我将 .exe 文件复制回服务器,当我尝试运行它时,收到运行时错误 49:Activex 组件无法创建对象。我知道当应用程序尝试使用 RDO 打开数据库连接时会发生此错误。

我可以从我的本地计算机和运行 Windows XP 的虚拟电脑上正常运行 .exe。

此应用程序之前在服务器上运行,我所做的更改是对其输出的文件内容进行的,因此不需要新的引用。

这些是它掉落的线条:

rdoEnvironments(0).CursorDriver = rdUseNone 
Set conDB = rdoEnvironments(0).OpenConnection("MRA", rdDriverNoPrompt, True) 

最佳答案

我最近解决了 Activex component can't create object错误如下:

  • 打开您的.vbp在文本编辑器中创建 VB6 项目的文件。
  • 文件的顶部是项目使用的所有 activex 对象。就我而言,这些是:

    Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\WINDOWS\system32\stdole2.tlb#OLE Automation
    Object={22D6F304-B0F6-11D0-94AB-0080C74C7E95}#1.0#0; msdxm.ocx
    Reference=*\G{3F4DACA7-160D-11D2-A8E9-00104B365C9F}#5.5#0#C:\WINDOWS\system32\vbscript.dll\3#Microsoft VBScript Regular Expressions 5.5
    Reference=*\G{3D0758FA-4171-11D0-A747-00A0C91110C3}#a.0#0#C:\WINDOWS\system32\dbgwproc.dll#Debug Object for AddressOf Subclassing
    Object={248DD890-BB45-11CF-9ABC-0080C7E7B78D}#1.0#0; MSWINSCK.OCX
    Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0; mscomctl.ocx
    Object={F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0; COMDLG32.OCX
    Object={3B7C8863-D78F-101B-B9B5-04021C009402}#1.2#0; RICHTX32.OCX
    
  • 打开注册表应用程序。

  • 导航至 HKEY_LOCAL_MACHINE\SOFTWARE\Classes
  • Ctrl+F,然后搜索上面的每个类(class) ID,例如 {00020430-0000-0000-C000-000000000046}
  • 期望找到Reference= HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface 和 Object= 中的条目HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID 中的条目
  • 在每个条目之后,您会注意到有一个类似 #1.2 的版本。就我而言,我发现 Version 中列出了相同的版本号。键在我在注册表中找到匹配项的位置附近。如果版本不匹配,可能需要注册正确版本的 OCX 或 DLL 文件。
  • 找到每个条目后,您可以单击注册表树并点击向左箭头,直到返回 Classes分支,然后搜索下一个条目。
  • 最重要的是,如果您没有找到您搜索的类 ID 的条目,则很可能会导致 Activex component can't create object错误。

就我而言,缺少的类是 Reference=*\G{3D0758FA-4171-11D0-A747-00A0C91110C3}#a.0#0#C:\WINDOWS\system32\dbgwproc.dll#Debug Object for AddressOf Subclassing 。这是在调试器中运行 VB6 应用程序时使用的特殊类,但不应与应用程序一起分发或在分发的应用程序中引用它。我通过打开 Project > <app name> Properties... > 'Make' tab 让 VB 停止引用 dbgwproc.dll并删除DEBUGWINDOWPROC = 1来自Conditional Compilation Arguments: 。重建后,不再出现错误。

关于VB6 Activex组件无法创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17302566/

相关文章:

vb6 - 错误处理 block 中Resume和Goto的区别

vb6 - 如何在 VB6 中创建自动完成组合框?

c# - 64 位 Windows 中的 ActiveX 控件

sql - SysIndex - is_unique 和 is_unique_constraint 的黑白差异

sql-server - 文件到达文件夹时如何执行SSIS包

c# - 在 UI 线程中从 c++ 回调到 vb6

vb6更改引用路径

javascript - 网页中的 Excel 数据透视表

c++ - Qt ActiveX 数据类型

sql-server - 使用 BCP 从 SQL Server 2000 导出图像列