在执行到红字的那一行时出错:代码如下://testDlg.h
class CIVSDlg : public CDialog
{
// 构造
public:
CtestDlg(CWnd* pParent = NULL); // 标准构造函数
CLogin *p_Login;// 对话框数据
enum { IDD = IDD_TEST_DIALOG }; protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()// 实现
protected:
HICON m_hIcon;public:
afx_msg void OnBnClickedButtonSetsafe();
afx_msg void OnDestroy();
};
//testDlg.cpp
CIVSDlg *d_IvsDlg;void CIVSDlg::OnBnClickedButtonSetsafe()
{
// TODO: 在此添加控件通知处理程序代码
p_Login = new CLogin();
p_Login->Create(IDD_LOGIN,this);
p_Login->ShowWindow(SW_SHOW);}if(needCheck)//收到强制设防消息
{
CRect rcDesktop;
d_IvsDlg->GetWindowRect(rcDesktop);
m_wndTaskbarNotifier.WndShow("您车辆当前处于可疑状态,请进行身份验证!",rcDesktop);
d_IvsDlg->OnBnClickedButtonSetsafe();
needSafecheck = TRUE;
}
class CIVSDlg : public CDialog
{
// 构造
public:
CtestDlg(CWnd* pParent = NULL); // 标准构造函数
CLogin *p_Login;// 对话框数据
enum { IDD = IDD_TEST_DIALOG }; protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()// 实现
protected:
HICON m_hIcon;public:
afx_msg void OnBnClickedButtonSetsafe();
afx_msg void OnDestroy();
};
//testDlg.cpp
CIVSDlg *d_IvsDlg;void CIVSDlg::OnBnClickedButtonSetsafe()
{
// TODO: 在此添加控件通知处理程序代码
p_Login = new CLogin();
p_Login->Create(IDD_LOGIN,this);
p_Login->ShowWindow(SW_SHOW);}if(needCheck)//收到强制设防消息
{
CRect rcDesktop;
d_IvsDlg->GetWindowRect(rcDesktop);
m_wndTaskbarNotifier.WndShow("您车辆当前处于可疑状态,请进行身份验证!",rcDesktop);
d_IvsDlg->OnBnClickedButtonSetsafe();
needSafecheck = TRUE;
}
根据断言代码处检查下是什么原因
p_Login->Create失败?
File f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\wincore.cpp
Line: 900For information on how your program can cause an assertion
failure,see the Visual C++ documentation on asserts.(Press Retry to debug the application)终止 重试 忽略
//Login.h
///-------------------------------------------------------start#pragma once
// CLogin 对话框class CLogin : public CDialog
{
DECLARE_DYNAMIC(CLogin)public:
CLogin(CWnd* pParent = NULL); // 标准构造函数
virtual ~CLogin(); static DWORD WINAPI CheckPwd(LPVOID param); void LockAllCtrl();
void UnLockAllCtrl();
// 对话框数据
enum { IDD = IDD_LOGIN };protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 DECLARE_MESSAGE_MAP()
afx_msg void OnBnClickedButton1();
afx_msg void OnBnClickedButton2();
afx_msg void OnBnClickedButton3();
afx_msg void OnBnClickedButton4();
afx_msg void OnBnClickedButton6();
afx_msg void OnBnClickedButton7();
afx_msg void OnBnClickedButton8();
afx_msg void OnBnClickedButton9();
afx_msg void OnBnClickedButton10();
afx_msg void OnBnClickedButton11();
afx_msg void OnBnClickedButton12();
afx_msg void OnBnClickedButton13();
afx_msg void OnBnClickedButton5();
public:
afx_msg void OnBnClickedButtonClose();
};///-------------------------------------------------------------end//Login.cpp///-------------------------------------------------------------start// Login.cpp : 实现文件
//#include "stdafx.h"
#include "IVS.h"
#include "Login.h"
#include "IVSDlg.h"
CString password;
int pwdNum=0;int m_SendNum = 0;//表示向中心经过多少次验证
BOOL m_SecuritySuccess=FALSE;//代表设防/撤防是否成功
extern int m_ThreadState;
extern CIVSDlg *d_IvsDlg;
extern int m_SecurityState;//0表示设防,1表示撤防
extern BOOL AskSafe;
// CLogin 对话框
extern TCPer* p_TCPer;
IMPLEMENT_DYNAMIC(CLogin, CDialog)
CLogin *d_Login;
extern int IsSafe;
extern BOOL comCheck;
CLogin::CLogin(CWnd* pParent /*=NULL*/)
: CDialog(CLogin::IDD, pParent)
{
d_Login = this;
}CLogin::~CLogin()
{
}void CLogin::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CLogin, CDialog)
ON_BN_CLICKED(IDC_BUTTON1, &CLogin::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON2, &CLogin::OnBnClickedButton2)
ON_BN_CLICKED(IDC_BUTTON3, &CLogin::OnBnClickedButton3)
ON_BN_CLICKED(IDC_BUTTON4, &CLogin::OnBnClickedButton4)
ON_BN_CLICKED(IDC_BUTTON6, &CLogin::OnBnClickedButton6)
ON_BN_CLICKED(IDC_BUTTON7, &CLogin::OnBnClickedButton7)
ON_BN_CLICKED(IDC_BUTTON8, &CLogin::OnBnClickedButton8)
ON_BN_CLICKED(IDC_BUTTON9, &CLogin::OnBnClickedButton9)
ON_BN_CLICKED(IDC_BUTTON10, &CLogin::OnBnClickedButton10)
ON_BN_CLICKED(IDC_BUTTON11, &CLogin::OnBnClickedButton11)
ON_BN_CLICKED(IDC_BUTTON12, &CLogin::OnBnClickedButton12)
ON_BN_CLICKED(IDC_BUTTON13, &CLogin::OnBnClickedButton13)
ON_BN_CLICKED(IDC_BUTTON5, &CLogin::OnBnClickedButton5)
ON_BN_CLICKED(IDC_BUTTON_CLOSE, &CLogin::OnBnClickedButtonClose)
END_MESSAGE_MAP()
// CLogin 消息处理程序
void CLogin::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
password += "1";
SetDlgItemText(IDC_EDIT1,password);
pwdNum++;
}void CLogin::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
password += "2";
SetDlgItemText(IDC_EDIT1,password);
pwdNum++;
}void CLogin::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
password += "3";
SetDlgItemText(IDC_EDIT1,password);
pwdNum++;
}void CLogin::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
password += "4";
SetDlgItemText(IDC_EDIT1,password);
pwdNum++;
}void CLogin::OnBnClickedButton6()
{
// TODO: 在此添加控件通知处理程序代码
password += "5";
SetDlgItemText(IDC_EDIT1,password);
pwdNum++;
}void CLogin::OnBnClickedButton7()
{
// TODO: 在此添加控件通知处理程序代码
password += "6";
SetDlgItemText(IDC_EDIT1,password);
pwdNum++;
}void CLogin::OnBnClickedButton8()
{
// TODO: 在此添加控件通知处理程序代码
password += "7";
SetDlgItemText(IDC_EDIT1,password);
pwdNum++;
}void CLogin::OnBnClickedButton9()
{
// TODO: 在此添加控件通知处理程序代码
password += "8";
SetDlgItemText(IDC_EDIT1,password);
pwdNum++;
}void CLogin::OnBnClickedButton10()
{
// TODO: 在此添加控件通知处理程序代码
password += "9";
SetDlgItemText(IDC_EDIT1,password);
pwdNum++;
}void CLogin::OnBnClickedButton11()
{
// TODO: 在此添加控件通知处理程序代码
password += "0";
SetDlgItemText(IDC_EDIT1,password);
pwdNum++;}void CLogin::OnBnClickedButton12()
{
// TODO: 在此添加控件通知处理程序代码
int length = password.GetLength();
password=password.Left(length-1);
SetDlgItemText(IDC_EDIT1,password);
pwdNum--;
}void CLogin::OnBnClickedButton13()
{
// TODO: 在此添加控件通知处理程序代码
//在OnInitiDialog里面读取配置文件中的监控中心IP和端口号
//巡检协议。
//密码验证,不成功,跳出。成功进入下一步
//开启GPS数据采集
//AfxMessageBox("向中心发送密码进行验证。");
CString pwd;
GetDlgItemText(IDC_EDIT1,pwd); //pwd = "331833183318";
//pwd = "33183318";
string ppwd;
ppwd = pwd.GetBuffer(0);
d_IvsDlg->SendIDPWD(ppwd);
comCheck = TRUE;//身份验证开启
DWORD nID;
::CreateThread(NULL,0,CheckPwd,NULL,0,&nID);
AskSafe = TRUE;
}
int inputcount = 0;
DWORD CLogin::CheckPwd(LPVOID param)
{
while (m_ThreadState && comCheck)
{
if(m_SecurityState==0)
{
if(m_SendNum>50)//99次以后循环
{
AfxMessageBox("密码验证错误,请重新输入。");
comCheck = FALSE;
Sleep(50); inputcount++;
m_SendNum = 0;
}
m_SendNum++;//发送次数++ if(inputcount> 5)
{
AfxMessageBox("超过输入次数,请等待30秒。");
d_IvsDlg->m_SetSecurity.EnableWindow(FALSE);
d_Login->LockAllCtrl();
Sleep(3000);
d_Login->UnLockAllCtrl();
d_IvsDlg->m_SetSecurity.EnableWindow(TRUE);
inputcount = 0;
return 0;//如果发送次数大于5次,则退出当前线程,并锁定登录界面 等待3s
}
}
//p_TCPer->TCPSend(0,0,0,0,0,0,0,0);//按照设防登录协议发送当前命令
Sleep(20);
}
// AfxMessageBox(_T("DoloadThread_end"));
return 0;
}
void CLogin::LockAllCtrl()
{
GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON3)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON4)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON5)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON6)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON7)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON8)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON9)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON10)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON11)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON12)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON13)->EnableWindow(FALSE);
}
void CLogin::UnLockAllCtrl()
{
GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON2)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON3)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON4)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON5)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON6)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON7)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON8)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON9)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON10)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON11)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON12)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON13)->EnableWindow(TRUE);
}
void CLogin::OnBnClickedButton5()
{
// TODO: 在此添加控件通知处理程序代码
password="";
pwdNum = 0;
SetDlgItemText(IDC_EDIT1,password);
}
void CLogin::OnBnClickedButtonClose()
{
// TODO: 在此添加控件通知处理程序代码
OnOK();
}
///-------------------------------------------------------------end
我在CtestDlg.cpp 在对话框的OnInitDialog()中加了如下代码:p_Login=NULL;程序和之前的一模一样。谢谢回复