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

时间:2017-03-16 22:06:42

标签: c++ ado

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

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

问题是:如果我将此应用程序与数据库一起移动到运行Windows x86的另一台机器上,它就不起作用了!请不要建议数据库的位置是问题。

  • 如果我将它移至win x64,请记住我在x64机器上将项目构建为win32应用程序。

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

  • 所以我猜问题是因为win64上的ado dll不能在win32上运行。

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

以下是代码示例:

#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
  • 成功或失败

1 个答案:

答案 0 :(得分:0)

我想知道为什么人们如此消极?:当他们无法明确解释他们vote down时!

我设法以这种方式解决这个问题:

1-转到桌面计算机窗口32位并复制文件夹: C:\program files\common files\system\ado到我的笔记本电脑的windows7 64位并粘贴到我的项目中,所以我的项目看起来像:

C:\users\myUserName\Desktop\AdoProj\ado

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

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

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

相关问题