我用domodal()函数弹一个对话框窗口,然后关闭,但是在整个程序退出后,弹出错误(DEBUG)模式下,发行版本无问题。
错误位置在:
void AFXAPI AfxReleaseActCtx(HANDLE hActCtx)
{
if (pfnReleaseActCtx != 0)
{
pfnReleaseActCtx(hActCtx);
}
}

解决方案 »

  1.   

    检查一下你VC所用的头文件和lib库(tool->options->directory)。印象中,有一个头文件重名但是文件内容不一样。
      

  2.   

    ASSERT定义的错误只会在DEBUG模式下弹出。但一样是错误。楼主给的信息不足,如是只是在弹出对话框后关程序会出错而不弹对话框直接关闭不出错的话,最好把对话框代码贴出来。
      

  3.   

    // SysSetup.cpp : 实现文件
    //#include "stdafx.h"
    #include "YHRTOS.h"
    #include "SysSetup.h"
    #include "base64.h"
    // SysSetup 对话框IMPLEMENT_DYNAMIC(SysSetup, CDialog)SysSetup::SysSetup(CWnd* pParent /*=NULL*/)
    : CDialog(SysSetup::IDD, pParent)
    {}SysSetup::~SysSetup()
    {
    }void SysSetup::DoDataExchange(CDataExchange* pDX)
    {
    CDialog::DoDataExchange(pDX);
    }
    BEGIN_MESSAGE_MAP(SysSetup, CDialog)
    ON_BN_CLICKED(IDOK, &SysSetup::OnBnClickedOk)
    ON_BN_CLICKED(IDC_BUTTON1, &SysSetup::OnBnClickedButton1)
    ON_EN_CHANGE(IDC_EDIT5, &SysSetup::OnEnChangeEdit5)
    END_MESSAGE_MAP()
    // SysSetup 消息处理程序void SysSetup::OnBnClickedOk()
    {
    CString strSection       = _T("DataBase");
    CString strStringItem    = _T("");
    CString strValue  = _T("");
    CString strFileName  = _T(".\\RToSDb.ini");
    strStringItem="ServerName";
    GetDlgItem(IDC_EDIT1)->GetWindowText(strValue);
    WritePrivateProfileString(strSection,strStringItem,strValue,strFileName);
    strStringItem="LoginName";
    GetDlgItem(IDC_EDIT2)->GetWindowText(strValue);
    WritePrivateProfileString(strSection,strStringItem,strValue,strFileName);
    strStringItem="LoginPwd";
    GetDlgItem(IDC_EDIT3)->GetWindowText(strValue);
    WritePrivateProfileString(strSection,strStringItem,strValue,strFileName);
    strStringItem="DataBase";
    GetDlgItem(IDC_EDIT4)->GetWindowText(strValue);
    WritePrivateProfileString(strSection,strStringItem,strValue,strFileName);
    strStringItem="Interval";
    GetDlgItem(IDC_EDIT5)->GetWindowText(strValue);
    WritePrivateProfileString(strSection,strStringItem,strValue,strFileName);
    OnOK();
    }
    BOOL SysSetup::OnInitDialog()
    {
    CString strFileName,strStringItem,strSection,strValue;
    strFileName=_T(".\\RToSDb.ini");
    strSection=_T("DataBase");
    strStringItem=_T("ServerName");
    GetPrivateProfileString(strSection,strStringItem,"",(LPSTR)(LPCTSTR)strValue,80,strFileName);
    GetDlgItem(IDC_EDIT1)->SetWindowText(strValue);
    strStringItem=_T("LoginName");
    GetPrivateProfileString(strSection,strStringItem,"",(LPSTR)(LPCTSTR)strValue,80,strFileName);
    GetDlgItem(IDC_EDIT2)->SetWindowText(strValue);
    strStringItem=_T("LoginPwd");
    GetPrivateProfileString(strSection,strStringItem,"",(LPSTR)(LPCTSTR)strValue,80,strFileName);
    GetDlgItem(IDC_EDIT3)->SetWindowText(strValue);
    strStringItem=_T("DataBase");
    GetPrivateProfileString(strSection,strStringItem,"",(LPSTR)(LPCTSTR)strValue,80,strFileName);
    GetDlgItem(IDC_EDIT4)->SetWindowText(strValue);
    strStringItem=_T("Interval");
    GetPrivateProfileString(strSection,strStringItem,"",(LPSTR)(LPCTSTR)strValue,80,strFileName);
    GetDlgItem(IDC_EDIT5)->SetWindowText(strValue);
    return true;
    }
    void SysSetup::OnBnClickedButton1()
    {
    //CRealDBCS *dlg = new CRealDBCS();
    //dlg->DoModal();
    //delete dlg;
    }void SysSetup::OnEnChangeEdit5()
    {
    // TODO:  如果该控件是 RICHEDIT 控件,则它将不会
    // 发送该通知,除非重写 CDialog::OnInitDialog()
    // 函数并调用 CRichEditCtrl().SetEventMask(),
    // 同时将 ENM_CHANGE 标志“或”运算到掩码中。 // TODO:  在此添加控件通知处理程序代码
    }
      

  4.   

    #pragma once
    // SysSetup 对话框class SysSetup : public CDialog
    {
    DECLARE_DYNAMIC(SysSetup)public:
    SysSetup(CWnd* pParent = NULL);   // 标准构造函数
    virtual ~SysSetup();// 对话框数据
    enum { IDD = IDD_DIALOG1 };protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
    BOOL OnInitDialog(); DECLARE_MESSAGE_MAP()
    public:
    afx_msg void OnBnClickedOk();
    public:
    afx_msg void OnBnClickedButton1();
    public:
    afx_msg void OnEnChangeEdit5();
    };
      

  5.   

    这是调用时的代码
             SysSetup *dlg = new SysSetup();
    dlg->DoModal();
    delete dlg;
      

  6.   

    YHRTOS.exe 中的 0x7c813000 处未处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突
      

  7.   

    检查一下你VC所用的头文件和lib库(tool->options->directory)
    我以前遇到过同样的问题,错误就是,在tool->options->directory将错误的头文件或者lib库放到了靠上的位置,由于程序会优先包含靠上的文件,因此使得程序使用了错误的文件进行编译或者链接。
      

  8.   

    我在项目属性中将该《MFC的使用》改为如下,即通过,不知道为什么,谢谢各位朋友的支持
    在静态库中使用 MFC
      

  9.   

    如果有源码,发一下,帮你解决 [email protected]
      

  10.   

    谢谢,我发现用了RichEdit或Edit控件就不好用,现在我用了List控件代替,暂时对付过去了