在MFC中,assert_valid函数是一个调试工具,用于确保对象的状态是有效的。它通常在类的成员函数中被调用,以确保对象在使用之前已经被正确初始化。 assert_valid函数通常会检查对象的各种成员变量,以确保它们具有合理的值,并且对象的内部状态是一致的。如果对象的状态无效,assert_valid函数会抛出一个断言错误,以便在调试时...
ASSERT_VALID宏用来在运行时检查一个对象的内部合法性,比如说现在有一个学生对象,我们知道每个学生的年龄一定大于零,若年龄小于零,则该学生对象肯定有问题。事实上,ASSERT_VALID宏就是转化为对象的成员函数AssertValid()的调用,只是这种方法更安全。它的参数是一个对象指针,通过这个指针来调用它的AssertValid()成员函数。
ASSERT_VALID最后会调用MFC类对象的AssertValid函数,因此只要重载AssertValid,令其不检测与线程相关的这些东东,就不会弹出出错框了(其实这些出错框,本来就是人为的弹出来的)。 费话就不说了,假设我们的对话框是CTmthDlg,下面是重载后的代码 void CTmthDlg::AssertValid() const { if (m_hWnd == NULL) return; ...
在MFC中,ASSERT_VALID是一个宏,用于在调试时验证类对象的有效性。它通常在类的成员函数中使用,以确保对象的内部状态是有效的。 ASSERT_VALID的作用是检查对象的数据成员是否具有预期的有效值,并在条件为假时触发断言。如果断言失败,会引发一个断言对话框,显示详细的错误信息,帮助开发者定位问题。 使用ASSERT_VALID的...
CMyData クラスは、AssertValidの機構を使用して、データ メンバーに格納されているオブジェクトの有効性を検証します。 CMyData クラスでオーバーライドしたAssertValidは、独自の m_pDataList メンバー変数に対してASSERT_VALIDマクロを呼び出します。
VS2005调试输出显示:ASSERT_VALID fails with NULL pointer 然后华丽丽的中断了,弹窗说是断言引发了个中断,然后出现了这个情形: 明显的File路径不对,这个VS的编译器报错也稀里糊涂的不指哪边出错。google了一系列法子依然找不到。然后就是令人崩溃抓狂的各种调试,调了两小时,无果。最终逼我这个MFC菜鸟使出绝招:新...
如果任何成员变量存储对象,则可以使用ASSERT_VALID宏测试它们的内部有效性(如果它们的类重写了AssertValid)。 例如,考虑 CMyData 类,该类在其成员变量之一中存储了一个CObList。CObList变量 m_DataList 存储了一个 CPerson 对象的集合。CMyData 的简化声明如下所示: ...
MFC 为断言检查定义 ASSERT 宏。 它还定义 MFC ASSERT_VALID 和 CObject::AssertValid 以供检查 CObject 派生的对象的内部状态。如果参数(一个表达式)计算为零或 false,则 MFC ASSERT 宏将暂停程序执行并警告用户。 如果表达式计算为非零,则继续执行。
ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX<0xF000);CMenu*pSysMenu=GetSystemMenu(FALSE);if(pSysMenu!=nullptr){BOOLbNameValid;CStringstrAboutMenu;bNameValid=strAboutMenu.LoadString(IDS_ABOUTBOX);ASSERT(bNameValid);if(!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR...
ASSERT_VALID(this); // 验证本身 ASSERT_VALID(pView); // 验证pView // 执行foo的其它操作 } 如下所示,这些宏直接调用AfxAssertValidObject(): void CMyView::foo(CYourView* pView) { //ASSERT_VALID(this); // 验证本身 AfxAssertValidObject(this,__FILE__,__LINE__); ...