建立在WIN64上的C++ ADO在win32操作系统上无法正常工作
您好,我已经构建了一个使用ADO连接到MS ACCESS 2007的C++应用程序:运行Windows 7 Professional 64位的笔记本电脑上的提供程序是MICROSOFT.ACE.OLEDB.12.0
。建立在WIN64上的C++ ADO在win32操作系统上无法正常工作
一切都好,它就像一个魅力。
问题是:如果我将该应用程序与数据库移动到另一台运行Windows x86的计算机,它不起作用!请不要建议数据库的位置是问题。
如果我将它移动到一个双赢的x64它的作品记住我建这个项目作为我的x64机器上的Win32应用程序。
如果我在win32机器上构建代码,它可以在win 64上运行。
所以我想这个问题是由于win64上的ado dll在win32上不起作用。
那么我怎么弄出来:在win64上构建一个C++ ado应用程序,它在win32和win64操作系统上工作?
这里是一个代码示例:
#include <afxdisp.h>
#include <comdef.h>
#import "C:\\Program files\\Common Files\\System\\ado\\msado15.dll"\
no_namespace\
rename("EOF", "adoEOF")
try{
bool m_IsConnectionOpen = false;
_ConnectionPtr pConnection;
HRESULT hr = pConnection.CreateInstance(__uuidof(Connection));
if(SUCCEEDED(hr)){
MessageBox(NULL, "Create Instance Succeeded!", 0, 0);
hr = pConnection->Open(_bstr_t(L"Provider=Microsoft.ACE.OLEDB.12.0;\
Data Source=bin.accdb;"),
_bstr_t(""),
_bstr_t(""),
adModeUnknown);
if(SUCCEEDED(hr)){
MessageBox(NULL, "Connection Succeeded!", 0, 0);
m_IsConnectionOpen = TRUE;
}
else
MessageBox(0, "Connection failed", 0,0);
}
catch(_com_error& e){
MessageBox(NULL, (LPSTR)e.Description(), 0, 0);
}
catch(...){
MessageBox(NULL, "Unhandled Exception!", 0, 0);
}
- 我不明白的
CreateInstance
不知成功或失败,为什么人们都这么消极?:当他们不能提供明确的解释他们vote down
!
我设法这样弄明白:
1转到我的台式电脑Windows 32位和文件夹复制: C:\program files\common files\system\ado
到我的笔记本电脑的Windows7的64位和我的项目粘贴,所以我的项目看起来像:
C:\users\myUserName\Desktop\AdoProj\ado
2 - 现在,当我输入我导入新的(在我的项目文件夹ADO)的dll:
#import C:\\users\\myUserName\\Desktop\\AdoProj\\ado\\msado15.dll \ no_namespace \ rename("EOF", "adoEOF")
现在该程序在win64和win32系统上运行但我不认为这是一个正确的解决方案“在win64中使用win32 dll”,是否有任何明确的解决方案?
*它不起作用*不是有用的问题描述。它以什么方式不起作用?你有错误信息吗?如果是这样,你得到了什么确切的错误?你的应用崩溃了吗?如果是这样,你会得到什么样的异常或错误信息?我们无法从我们坐的位置看到您的屏幕。 –
@KenWhite:它不会崩溃。但问题出在'Connection'中,因此我无法从异常处理中获取任何消息。 –
你有关于你前面的'Connection'的信息,并且你已经在你的问题中提供了关于它的**零信息**。当你给我们提供**绝对没有细节**时,你如何期待我们来帮助你?你已经给我们**没有关于**的任何细节** **。请阅读[问],然后[编辑]您的问题,以添加我们可以用来帮助的详细信息。没有细节,你的问题对于未来的读者来说没有任何价值,应该关闭。 –