0

好的,所以这是一个非常复杂的问题,我会尽力解释。

我们有一个与 Sql Connection 通信的 c++ 应用程序,如下所示:

CoCreateInstance(_T("ADODB.Connection"))

这工作正常。

我们最近将我们所有的后端代码都变成了一个 Com 对象。如果我编写一个 Vb 程序来加载我们的 Com 对象并执行一些数据库操作,一切正常,CoCreateInstance(_T("ADODB.Connection"))
仍然有效。

我们使用 Fitnesse 进行测试,所以我编写了一个夹具:
1) 将一串 vb 代码输入到 html 页面中。
2) 编译 vb 代码
3) 运行使用我们 Com 对象的 vb 代码。
* Fitnesse 是一个 Java 应用程序,因此代码路径也通过 Java。

现在,当任何操作触及数据库时,Com 对象都会遇到异常。使用消息框,并删除代码我将问题缩小到这行代码:

CoCreateInstance(_T("ADODB.Connection"))

通常返回码是 0,但是通过这段代码调用代码链,我得到了返回码:800401F3,它表示它找不到要加载的对象。

我拉着头发试图弄清楚发生了什么。任何一点见解都将不胜感激。

4

2 回答 2

2

它告诉您它在注册表中找不到 ProgId。这不是很健康,它是任何 Windows 安装中的一个非常标准的组件。验证这一点,启动 regedit.exe 并导航到 HKLM\Software\Classes\ADODB.Connection

如果缺少,那么您需要在该机器上安装 dbase 提供程序。从 Microsoft 下载 MDAC 2.8 安装程序并运行它。如果它没有丢失,那么您有一个更神秘的问题,可能与这是一个 64 位操作系统有关。然后查看 HKLM\Software\Wow6432Node。通过使用 SysInternals 的 ProcMon 工具来获取其他诊断信息,以查看它在注册表中的作用。

于 2010-08-25T16:31:16.433 回答
1

作为替代方案,您不会说您的 com“对象”是否是 .dll。如果是,请确保它是“自注册”,或者您需要在命令提示符下运行它。

regsvr32 myobject.dll

如果它是带有 COM 对象的 exe,请通过使用“/RegServer”命令行选项运行程序来注册对象,如下所示:

myobject.exe /RegServer

高温高压

于 2010-08-25T17:19:52.870 回答