我用domodal()函数弹一个对话框窗口,然后关闭,但是在整个程序退出后,弹出错误(DEBUG)模式下,发行版本无问题。
错误位置在:
void AFXAPI AfxReleaseActCtx(HANDLE hActCtx)
{
if (pfnReleaseActCtx != 0)
{
pfnReleaseActCtx(hActCtx);
}
}
错误位置在:
void AFXAPI AfxReleaseActCtx(HANDLE hActCtx)
{
if (pfnReleaseActCtx != 0)
{
pfnReleaseActCtx(hActCtx);
}
}
//#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: 在此添加控件通知处理程序代码
}
// 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();
};
SysSetup *dlg = new SysSetup();
dlg->DoModal();
delete dlg;
我以前遇到过同样的问题,错误就是,在tool->options->directory将错误的头文件或者lib库放到了靠上的位置,由于程序会优先包含靠上的文件,因此使得程序使用了错误的文件进行编译或者链接。
在静态库中使用 MFC