好的,这是一个非常复杂的问题,我会尽力解释。
我们有一个c ++应用程序,它与Sql Connection通信如下:
CoCreateInstance(_T("ADODB.Connection"))
这很好用。
我们最近将所有后端代码都变成了一个Com对象。如果我编写一个Vb程序来加载我们的Com对象并进行一些数据库操作,一切正常,CoCreateInstance(_T("ADODB.Connection"))
仍然有效。
我们使用fitnesse进行测试,所以我写了一个夹具:
1)将一串vb代码输入到html页面
2)编译vb代码
3)运行使用我们的Com对象的vb代码
* fitnesse是一个java应用程序,因此代码路径也可以通过Java传递。
现在当任何操作触及数据库时,Com Object会发生异常。使用消息框,删除代码我将问题缩小到这行代码:
CoCreateInstance(_T("ADODB.Connection"))
通常返回代码为0,但是使用这段代码调用代码我得到返回代码:800401F3,表示无法找到要加载的对象。
我正拉着我的头发试图弄清楚发生了什么。任何一点见解将不胜感激。
答案 0 :(得分:2)
它告诉你它无法在注册表中找到ProgId。这不是很健康,它是任何Windows安装上非常标准的组件。验证这一点,启动regedit.exe并导航到HKLM \ Software \ Classes \ ADODB.Connection
如果缺少,则需要在该计算机上安装dbase提供程序。从Microsoft下载MDAC 2.8安装程序并运行它。如果它没有丢失那么你有一个更神秘的问题,也许这与64位操作系统有关。然后查看HKLM \ Software \ Wow6432Node。通过使用SysInternals的ProcMon工具获取其他诊断信息,以查看它在注册表中的内容。
答案 1 :(得分:1)
作为替代方案,您不会说您的com“对象”是否为.dll。如果是,则确保它是“自注册”,或者您需要在命令提示符下运行它。
regsvr32 myobject.dll
如果它是带有COM对象的exe,请通过使用“/ RegServer”命令行选项运行程序来注册对象,如下所示:
myobject.exe /RegServer
HTH