hur.cn - 华软网

 热门搜索

各位高手,60分诚心求教:Debug asserting Failed!

  作者:未知    来源:网络    更新时间:2011/4/15
#include "stdafx.h"
#include "tuxian.h"
#include "tuxianDlg.h"
#include<string>
//#include<stdlib>
//#include<stdio>
#include<iostream>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CTuxianDlg::CTuxianDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTuxianDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CTuxianDlg)
m_strfile = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CTuxianDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTuxianDlg)
DDX_Control(pDX, IDC_CLEAN_BUTTON, m_cleanbtn);
DDX_Control(pDX, IDC_PICTURE_STATIC, m_bmppicture);
DDX_Control(pDX, IDC_SAVE_BUTTON, m_savebtn);
//DDX_Control(pDX, IDC_FILE_LIST, m_listfile);
DDX_Control(pDX, IDC_DRIVER_COMBO, m_drivercombo);
DDX_Control(pDX, IDC_BROWSE_BUTTON, m_browse);
// DDX_LBString(pDX, IDC_FILE_LIST, m_strfile);
//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CTuxianDlg, CDialog)
//{{AFX_MSG_MAP(CTuxianDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BROWSE_BUTTON, OnBrowseButton)
ON_BN_CLICKED(IDC_ACQUIRE_BUTTON, OnAcquireButton)
ON_EN_CHANGE(IDC_FILENAME_EDIT, OnChangeFilenameEdit)
ON_CBN_SELCHANGE(IDC_DRIVER_COMBO, OnSelchangeDriverCombo)
// ON_LBN_SELCHANGE(IDC_FILE_LIST, OnSelchangeFileList)
ON_BN_CLICKED(IDC_16BIT_RADIO, On16bitRadio)
ON_BN_CLICKED(IDC_BMP_RADIO, OnBmpRadio)
ON_BN_CLICKED(IDC_GIF_RADIO, OnGifRadio)
ON_BN_CLICKED(IDC_JPEG_RADIO, OnJpegRadio)
ON_BN_CLICKED(IDC_PICTURE_STATIC, OnPictureStatic)
ON_BN_CLICKED(IDC_CLEAN_BUTTON, OnCleanButton)
ON_COMMAND(ID_OPEN_MENU, OnOpenMenu)
ON_COMMAND(ID_CLOSE_MENU, OnCloseMenu)
ON_BN_CLICKED(IDC_SAVE_BUTTON, OnSaveButton)
ON_COMMAND(ID_SAVE_MENU, OnSaveMenu)
ON_COMMAND(IDC_RGB_COLOR, OnRgbColor)
ON_COMMAND(IDC_VSSCORLL_MENU, OnVsscorllMenu)
ON_COMMAND(IDC_HSSCROLL_MENU, OnHsscrollMenu)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTuxianDlg message handlers
BOOL CTuxianDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog.  The framework does this automatically
//  when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon

列位高人,怎么弄啊?
Alt+F7
HWND CDataExchange::PrepareCtrl(int nIDC)
{
ASSERT(nIDC != 0);
ASSERT(nIDC != -1); // not allowed
HWND hWndCtrl;
m_pDlgWnd->GetDlgItem(nIDC, &hWndCtrl);
if (hWndCtrl == NULL)
{
TRACE1("Error: no data exchange control with ID 0x%04X.\n", nIDC);
-> ASSERT(FALSE);
AfxThrowNotSupportedException();

}

nIDC 1006
---华软 网友回答---
  class="deleted_message"> 该回复于2011-04-16 09:21:57被版主删除
---华软网友回复---
那里?PrepareCtrl里?
---华软网友回复---
是否是在资源编辑器上你把某个控件给DEL了?
---华软网友回复---
引用 3 楼 visualeleven 的回复:
是否是在资源编辑器上你把某个控件给DEL了?

然后联系关系变量的部份却么有删除
---华软网友回复---
我也出现过类似的问题,就是由于你可能修改了资源的ID号。
备份工程,然后,保存资源资料(.rc),删除对话框资源,新创建一个对话框,摆放响应的控件,然后修改资源资料的对话框属性为之前对话框的属性,重新编译试试看!
---华软网友回复---
引用 2 楼 howtop2p 的回复:
那里?PrepareCtrl里?


HWND CDataExchange::PrepareCtrl(int nIDC)
{
ASSERT(nIDC != 0);
ASSERT(nIDC != -1); // not allowed
HWND hWndCtrl;
m_pDlgWnd->GetDlgItem(nIDC, &hWndCtrl);
if (hWndCtrl == NULL)
{
TRACE1("Error: no data exchange control with ID 0x%04X.\n", nIDC);
ASSERT(FALSE);
AfxThrowNotSupportedException();
}
m_hWndLastControl = hWndCtrl;
m_bEditLastControl = FALSE; // not an edit item by default
ASSERT(hWndCtrl != NULL);   // never return NULL handle
return hWndCtrl;

这是我看到的定义
---华软网友回复---
引用 3 楼 visualeleven 的回复:
是否是在资源编辑器上你把某个控件给DEL了?

我已经根据nIDC的值1006把删除控件的部份给屏障了啊
---华软网友回复---
设置一下断点,看在那个ASSERT的时候抛出异常
m_pDlgWnd->GetDlgItem(nIDC, &hWndCtrl);如果你的对话框上这个nIDC被删除,就会进入下面的if判断里面
if (hWndCtrl == NULL)
{
……
ASSERT(FALSE);
---华软网友回复---
  class="deleted_message"> 该回复于2011-04-16 08:58:41被版主删除
---华软网友回复---
引用 8 楼 king_hhuang 的回复:
设置一下断点,看在那个ASSERT的时候抛出异常
m_pDlgWnd->GetDlgItem(nIDC, &amp;hWndCtrl);如果你的对话框上这个nIDC被删除,就会进入下面的if判断里面
if (hWndCtrl == NULL)
{
……
ASSERT(FALSE);


把if这段屏障?
---华软网友回复---
查看出现问题的时候 nIDC 的值是几多,根据这个值到 resource.h 中查找看是哪一个控件,保证你屏障的 DoDataExchange 的对象是正确的,完全重新 build 一次试一试。
---华软网友回复---
就这么吧代码丢上来......
出现断言的时候选择重试然后看调用堆栈找问题
---华软网友回复---
应该是你把这个资源在.rc中删除吧,在ddx那里调试看看是哪一个资源
---华软网友回复---
引用 13 楼 hahaking119 的回复:
应该是你把这个资源在.rc中删除吧,在ddx那里调试看看是哪一个资源

void CTuxianDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
AfxMessageBox(str);
//AfxMessageBox((LPCTSTR)m_hIcon);
//{{AFX_DATA_MAP(CTuxianDlg)
DDX_Control(pDX, IDC_CLEAN_BUTTON, m_cleanbtn);
DDX_Control(pDX, IDC_SAVE_BUTTON, m_savebtn);
DDX_Control(pDX, IDC_DRIVER_COMBO, m_drivercombo);
DDX_Control(pDX, IDC_BROWSE_BUTTON, m_browse); //}}AFX_DATA_MAP 
}
---华软网友回复---
RC对话框清空了,怎么改呀?
---华软网友回复---
什么意思?对话框内容在 .rc 资料和 resource.h 中。
---华软网友回复---
建议你用动态的方法去获得指向一个控件变量的指针来操作,比如能够定义一个 CEdit* m_pEdit;
在oninitdialog中
m_pEdit = (CEdit*)GetDlgItem(...);然后 ASSERT(m_pEdit != NULL);这样只需你的控件在就基本不会错,而且容易排查:)
---华软网友回复---
引用 16 楼 lazy_2010 的回复:
什么意思?对话框内容在 .rc 资料和 resource.h 中。

在Resource View中,查看资源资料,只有0 icon显示。
---华软网友回复---
引用 18 楼 fsjyclb 的回复:
引用 16 楼 lazy_2010 的回复:
什么意思?对话框内容在 .rc 资料和 resource.h 中。

在Resource View中,查看资源资料,只有0 icon显示。

是否是资源资料被损坏了……?你尝试过手动重命名照旧什么的行为么?      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。