在MFC中,ASSERT_VALID是一个宏,用于在调试时验证类对象的有效性。它通常在类的成员函数中使用,以确保对象的内部状态是有效的。 ASSERT_VALID的作用是检查对象的数据成员是否具有预期的有效值,并在条件为假时触发断言。如果断言失败,会引发一个断言对话框,显示详细的错误信息,帮助开发者定位问题。 使用ASSERT_VALID的...
如果任何成员变量存储对象,则可以使用 ASSERT_VALID 宏测试它们的内部有效性(如果它们的类重写了 AssertValid)。例如,考虑 CMyData 类,该类在其成员变量之一中存储了一个 CObList。CObList 变量m_DataList 存储了一个 CPerson 对象的集合。CMyData 的简化声明如下所示:...
在MFC中,assert_valid函数是一个调试工具,用于确保对象的状态是有效的。它通常在类的成员函数中被调用,以确保对象在使用之前已经被正确初始化。 assert_valid函数通常会检查对象的各种成员变量,以确保它们具有合理的值,并且对象的内部状态是一致的。如果对象的状态无效,assert_valid函数会抛出一个断言错误,以便在调试时...
ASSERT_VALID宏用来在运行时检查一个对象的内部合法性,比如说现在有一个学生对象,我们知道每个学生的年龄一定大于零,若年龄小于零,则该学生对象肯定有问题。事实上,ASSERT_VALID宏就是转化为对象的成员函数AssertValid()的调用,只是这种方法更安全。它的参数是一个对象指针,通过这个指针来调用它的AssertValid()成员函数。
所以,MFC并不建议这种多线程中传递MFC对象的指针,而且MFC人为的加了一个ASSERT_VALID来表示它们的不建议。 但是,不建议并不表示不能用,如果你能够确认你的线程不会互相冲突,你就大胆的用吧。 正因为如此,MFC只是在Debug版本中才有这个ASSERT_VALID的问题存在,在Release版本中却没有,因为它没有理由来阻止我们用。
VS2005调试输出显示:ASSERT_VALID fails with NULL pointer 然后华丽丽的中断了,弹窗说是断言引发了个中断,然后出现了这个情形: 明显的File路径不对,这个VS的编译器报错也稀里糊涂的不指哪边出错。google了一系列法子依然找不到。然后就是令人崩溃抓狂的各种调试,调了两小时,无果。最终逼我这个MFC菜鸟使出绝招:新...
ASSERT_VALID(this); // 验证本身 ASSERT_VALID(pView); // 验证pView // 执行foo的其它操作 } 如下所示,这些宏直接调用AfxAssertValidObject(): void CMyView::foo(CYourView* pView) { //ASSERT_VALID(this); // 验证本身 AfxAssertValidObject(this,__FILE__,__LINE__); ...
打开google搜索,输入“defineassert”,然后单击搜索。WordNet中“ASSERT”有四种意思: 1.断言、声称、主张……(直接了当的陈述) 2.确认、查证、承认、宣誓……(正式而严肃的宣告某事属实,如:“Before God I swear I am innocent”——“在上帝面前我发誓我是清白的”) ...
MFC 为断言检查定义ASSERT宏。 它还定义MFC ASSERT_VALID 和 CObject::AssertValid以供检查 CObject 派生的对象的内部状态。 如果参数(一个表达式)计算为零或 false,则 MFC ASSERT 宏将暂停程序执行并警告用户。 如果表达式计算为非零,则继续执行。 当断言失败时,将有一个消息对话框显示断言的源文件的名称和行号...
ASSERT_VALID(pRibbon);CMFCRibbonColorButton* pColor = DYNAMIC_DOWNCAST(CMFCRibbonColorButton, pRibbon->FindByID(ID_FONT_COLOR));// Get the selected colorreturn pColor->GetColor();}2. 更新 CRibbonAppDoc.cpp 中的事件处理程序函数 CRibbonAppDoc::OnFontColor() 。