小弟编了一个单文档程序,通过对文档菜单弹出一个对话框,在对话框中有一个组合框,组合框中的内容希望通过读取access数据库来实现(ado连接),请问,我要在什么地方初始化com库呢,是在单文档的app中么,我试了,不行,然后我就在生成的对话框类的头文件中加了#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
在对话框中的OnInitDialog()函数中加了AfxOleInit();编译没有问题,可是当我点击菜单希望弹出对话框是就出错了,各位大虾,帮帮忙!!!

解决方案 »

  1.   

    报错信息是在oleinit.cpp中,调试时错误是在dlg->create()函数中
      

  2.   

    在InitInstance的开头部分加
    ::CoInitialize(NULL);
      

  3.   

    在StdAfx.h加
    #ifndef _AFX_NO_AFXCMN_SUPPORT
    #include <afxcmn.h> // MFC support for Windows Common Controls
    #import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
    #endif // _AFX_NO_AFXCMN_SUPPORT
      

  4.   

    尾鱼头说得方法我试了啊,只不过我没用::CoInitialize(NULL);,而是用的AfxOleInit();不好使啊,我再试试
      

  5.   

    刚刚试了尾鱼头的做法,不好使,
    E:\新仿真程序\offline\SRModeDlg.cpp(141) : error C2065: '_ConnectionPtr' : undeclared identifier
    E:\新仿真程序\offline\SRModeDlg.cpp(141) : error C2146: syntax error : missing ';' before identifier 'm_pConnection'
    E:\新仿真程序\offline\SRModeDlg.cpp(141) : error C2065: 'm_pConnection' : undeclared identifier
    E:\新仿真程序\offline\SRModeDlg.cpp(142) : error C2228: left of '.CreateInstance' must have class/struct/union type
    E:\新仿真程序\offline\SRModeDlg.cpp(142) : error C2065: 'Connection' : undeclared identifier
    E:\新仿真程序\offline\SRModeDlg.cpp(145) : error C2227: left of '->Open' must point to class/struct/union
    E:\新仿真程序\offline\SRModeDlg.cpp(145) : error C2065: 'adModeUnknown' : undeclared identifier
    E:\新仿真程序\offline\SRModeDlg.cpp(147) : error C2061: syntax error : identifier '_com_error'
    E:\新仿真程序\offline\SRModeDlg.cpp(147) : error C2310: catch handlers must specify one type
    E:\新仿真程序\offline\SRModeDlg.cpp(151) : error C2317: 'try' block starting on line '144' has no catch handlers
    E:\新仿真程序\offline\SRModeDlg.cpp(151) : error C2065: '_RecordsetPtr' : undeclared identifier
    E:\新仿真程序\offline\SRModeDlg.cpp(151) : error C2146: syntax error : missing ';' before identifier 'm_Recordset'
    E:\新仿真程序\offline\SRModeDlg.cpp(151) : error C2065: 'm_Recordset' : undeclared identifier
    E:\新仿真程序\offline\SRModeDlg.cpp(152) : error C2228: left of '.CreateInstance' must have class/struct/union type
    E:\新仿真程序\offline\SRModeDlg.cpp(152) : error C2065: 'Recordset' : undeclared identifier
    E:\新仿真程序\offline\SRModeDlg.cpp(155) : error C2227: left of '->Open' must point to class/struct/union
    E:\新仿真程序\offline\SRModeDlg.cpp(155) : error C2228: left of '.GetInterfacePtr' must have class/struct/union type
    E:\新仿真程序\offline\SRModeDlg.cpp(155) : error C2065: 'adOpenDynamic' : undeclared identifier
    E:\新仿真程序\offline\SRModeDlg.cpp(155) : error C2065: 'adLockOptimistic' : undeclared identifier
    E:\新仿真程序\offline\SRModeDlg.cpp(155) : error C2065: 'adCmdText' : undeclared identifier
    E:\新仿真程序\offline\SRModeDlg.cpp(157) : error C2061: syntax error : identifier '_com_error'
    E:\新仿真程序\offline\SRModeDlg.cpp(157) : error C2310: catch handlers must specify one type
    E:\新仿真程序\offline\SRModeDlg.cpp(161) : error C2317: 'try' block starting on line '154' has no catch handlers
    E:\新仿真程序\offline\SRModeDlg.cpp(161) : error C2065: '_variant_t' : undeclared identifier
    E:\新仿真程序\offline\SRModeDlg.cpp(161) : error C2146: syntax error : missing ';' before identifier 'var'
    E:\新仿真程序\offline\SRModeDlg.cpp(161) : error C2065: 'var' : undeclared identifier
    E:\新仿真程序\offline\SRModeDlg.cpp(166) : error C2227: left of '->BOF' must point to class/struct/union
    E:\新仿真程序\offline\SRModeDlg.cpp(167) : error C2227: left of '->MoveFirst' must point to class/struct/union
    E:\新仿真程序\offline\SRModeDlg.cpp(172) : error C2227: left of '->adoEOF' must point to class/struct/union
    E:\新仿真程序\offline\SRModeDlg.cpp(172) : fatal error C1903: unable to recover from previous error(s); stopping compilation
    Error executing cl.exe.SRModeDlg.obj - 30 error(s), 0 warning(s)
      

  6.   

    错误出在响应菜单函数中的dlg->Create(IDD_DIALOG_SRMODE,NULL);函数,程序死时弹出的对话框说是在oleinit.cpp的54行,我的主程序是个线程,在线程中我还调用了自己写的动态库,在动态库中使用dao方法读取数据库的,这个应该没影响吧?我想知道像我这种情况应该在什么地方引入和初始化com库好呢?
    void COfflineView::OnMenuSrmode() 
    {
    // TODO: Add your command handler code here
    CSRModeDlg *dlg=new CSRModeDlg;
    dlg->Create(IDD_DIALOG_SRMODE,NULL);
    dlg->ShowWindow(SW_SHOW);
    dlg->PostPoint(&flag_SRmode,&SRmode_ah,&SRmode_sel,&SRmode_amount,&SRmode_max2,&SRmode_max,SRmode_fs);
    }
      

  7.   

    在StdAfx.h中,加入如下代码
    #import "c:\program files\common files\system\ado\msado15.dll"  \
                no_namespace  rename("EOF","adoEOF") rename("BOF","adoBOF")
    Com 初试化
    在app的InitInstance中,加入AfxOleInit();或者
    CoInitialize(NULL)
    如果在线程中也使用了com,那么在线程中也要用CoInitialize初始
      

  8.   

    在StdAfx.h加
    然后rebuild all
      

  9.   

    hWnd = ::CreateDialogIndirect(hInst, lpDialogTemplate,
    pParentWnd->GetSafeHwnd(), AfxDlgProc);
    这句
      

  10.   

    按照我是菜鸟,我rebuild   all了一下,好使了,不过可能是我的数据库操作语句写错了,报"记录为空"(我自己定义的报错信息)
    然后就runtime error了
      

  11.   

    sql语句写错了,把from写成了form了,解决了!
      

  12.   

    你的程序是怎么实现的啊,我按照网上说的那样连接ACCESS数据库,运行时很多错误!
      

  13.   

    F:\ADOXCreateDatabase\ParentDlg.cpp(60) : error C2065: 'theApp' : undeclared identifier
    F:\ADOXCreateDatabase\ParentDlg.cpp(60) : error C2228: left of '.m_pConnection' must have class/struct/union type我的是这样的错误!怎么解决啊?求解答,谢谢!