我在我的工作机器中使用ADO它很好,在我的机器上我在创建应用程序后测试一些ADO代码并且刚刚定义了连接并尝试运行它失败的应用程序并给我以下错误< strong> REGDB_E_CLASSNOTREG 未注册的课程。我在同一台机器上构建和运行,我使用visual studio 2013,我在Windows 7 x64 sp1上。
这是我的简单代码
#include <iostream>
#import "C:\Program Files (x86)\Common Files\System\ado\msado15.dll" \
no_namespace rename("EOF", "EndOfFile")
using namespace std;
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
_ConnectionPtr pConnection;
HRESULT hr;
if(FAILED(CoInitialize(NULL)))
{
cout << "failed to initialize COM" << endl;
goto end;
}
// Intialize the ADO Connection object
if(FAILED(hr = pConnection.CreateInstance(__uuidof(Connection))))
{
cout << "failed to create connection" << endl;
goto end;
}
end:
system("pause");
}
搜索后我发现一些关于windows 7 sp1与下层操作系统不兼容的信息,如link,但这是不同的我在win7 x64 sp1上构建我调试它不是低版本的Windows,但我安装了更新修补程序Windows6.1-KB983246-v4-x64.msu
。我不知道是什么问题,这太糟糕了,我需要帮助。
此应用程序是x86所以我使用此路径“C:\ Program Files(x86)\ Common Files \ System \ ado \ msado15.dll” 我尝试了另一个x64应用程序,我将路径更改为“C:\ Program Files \ Common Files \ System \ ado \ msado15.dll”,我工作并且还使用了x86的路径
我尝试使用x86的x64路径,但现在总是说该类没有注册。
另一件看起来很有趣的事情是应用程序是x86但它加载x64 dll,加载的符号来自syswow64而不是来自system32,如下面的VS调试器的屏幕截图 但搜索后这是正常的,因为system32包含64个dll,syswow64包含32个dll