建立在WIN64上的C++ ADO在win32操作系统上无法正常工作

建立在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
+0

*它不起作用*不是有用的问题描述。它以什么方式不起作用?你有错误信息吗?如果是这样,你得到了什么确切的错误?你的应用崩溃了吗?如果是这样,你会得到什么样的异常或错误信息?我们无法从我们坐的位置看到您的屏幕。 –

+0

@KenWhite:它不会崩溃。但问题出在'Connection'中,因此我无法从异常处理中获取任何消息。 –

+0

你有关于你前面的'Connection'的信息,并且你已经在你的问题中提供了关于它的**零信息**。当你给我们提供**绝对没有细节**时,你如何期待我们来帮助你?你已经给我们**没有关于**的任何细节** **。请阅读[问],然后[编辑]您的问题,以添加我们可以用来帮助的详细信息。没有细节,你的问题对于未来的读者来说没有任何价值,应该关闭。 –

不知成功或失败,为什么人们都这么消极?:当他们不能提供明确的解释他们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”,是否有任何明确的解决方案?