C++ 基于 WIN64 构建的 ADO 在 win32 操作系统上不起作用



您好,我构建了一个使用 ADO 连接到 MS ACCESS 2007 的 C++ 应用程序:提供程序MICROSOFT.ACE.OLEDB.12.0在我的笔记本电脑上运行 Windows 7 Professional 64 位。

一切都很好,就像一个魅力。

问题是:如果我将此带有数据库的应用程序移动到另一台运行 Windows x86 的计算机,它不起作用!请不要建议数据库的位置是问题所在。

  • 如果我将其移动到 win x64,它可以工作,请记住,我在 x32 机器上将项目构建为 win64 应用程序。

  • 如果我在 win32 机器上构建代码,它在那里和 win 64 机器上都可以工作。

  • 所以我想问题是由于 win64 上的 ado dll 在 win32 上不起作用。

  • 那么我该如何弄清楚:在win64上构建一个适用于win32和win64操作系统的C++ adoy应用程序?

下面是一个代码示例:

#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-转到我的台式计算机窗口32位并复制文件夹: C:program filescommon filessystemado到笔记本电脑的 Windows7 64 位并粘贴到我的项目中,以便我的项目如下所示:

C:usersmyUserNameDesktopAdoProjado

2-现在,当我导入dll时,我导入了新dll(在我的项目文件夹中ado(:

#import C:\users\myUserName\Desktop\AdoProj\ado\msado15.dll no_namespace rename("EOF", "adoEOF")

现在该程序在win64和win32系统上运行,但我不认为这是一个正确的解决方案"在win32中使用win64 dlls"那么有什么明确的解决方案吗?

最新更新