在执行到红字的那一行时出错:代码如下://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;
  }

解决方案 »

  1.   

    报什么错误?断言在何处
    根据断言代码处检查下是什么原因
    p_Login->Create失败?
      

  2.   

    什么错误?ASSERT错误?不清楚你的CLogin对话框类中怎么写的?
      

  3.   

    出错信息如下:(X) Debug Assertion Failed!Program:e:\works\source\………………
    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)终止 重试 忽略
      

  4.   


    //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
      

  5.   

    代码没细看,可能是你CLogin类的创建的线程函数中的问题,你在线程函数中有操作窗口的动作
      

  6.   

    在 Init...   初始化里加上p_Login = NULL;
      

  7.   


    我在CtestDlg.cpp 在对话框的OnInitDialog()中加了如下代码:p_Login=NULL;程序和之前的一模一样。谢谢回复