几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量

几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 (http://www.dimcax.com/hust/index.php)
-   vc编程 (http://www.dimcax.com/hust/forumdisplay.php?f=76)
-   -   Visual C++ MFC 中常用宏的含义 (http://www.dimcax.com/hust/showthread.php?t=280)

huangyhg 2006-11-24 11:26 AM

Visual C++ MFC 中常用宏的含义
 
Visual C++ MFC 中常用宏的含义



1. ASSERT
  
ASSERT(booleanExpression)
  
1.1
适用范围









只在DEBUG版中有效,常用来判断指针是否为空。


1.2作用
验证表达式booleanExpression的值。

当表达式的值为false,则输出诊断消息,并且终止程序运行。
  

1.3 Example

// 判断指针point是否为空
ASSERT (point != NULL);

2. TRACE
  

TRACE(exp)
2.1 适用范围

只在DEBUG版中有效,常用于调试状态,跟踪多个变量在某个时刻的值。比如,统计或分析不同代码段的执行时间。


2.2作用
当程序在调试状态下多次运行时,跟踪多个变量的值。
  

2.3 Example

// 跟踪且输出四个变量的值

TRACE(_T("\tVertex %d (%f, %f, %f)\n"), geometricID[k], pCoord[0], pCoord[1], pCoord[2]);


3TRYCATCH

CATCH(exception_class,exception_object_pointer_name)


3.1 适用范围

用于文件读写操作或与第三方组件通讯时,捕获并处理其异常。TRYCATCH一般都成对使用。


3.2 作用

捕获可能发生异常的代码块。


3.3 Example

// 捕获可能发生异常的代码块,并且抛出异常处理

try

{

CaxArchive << pCax;

}

catch (CException *e)

{

e->GetErrorMessage(ErrStr + 5, 120);

AfxMessageBox((LPCTSTR)ErrStr);

}

4. DECLARE_DYNAMICIMPLEMENT_DYNAMIC

DECLARE_DYNAMIC(class_name)

IMPLEMENT_DYNAMIC(class_name,base_class_name)


4.1 适用范围

识别从CObject派生的类的类型,比如,在CAD软件的二次开发时,扩展并自定义的类。


4.2作用或说明  

当程序运行时,可通过RUNTIME_CLASS宏和CObject::IsKindOf函数识别类的类型。

4.3 Example

// *.h

DECLARE_DYNAMIC(CCax_Curve)

// *.cpp

IMPLEMENT_DYNAMIC(CCax_Curve)













VCMacro 2006-12-19 02:59 PM

回复: Visual C++ MFC 中常用宏的含义
 
CATCH_ALL(e)
{
CWinThread* pWinThread = AfxGetThread();
if ( pWinThread != NULL )
{
lResult = pWinThread->ProcessWndProcException(e, &pThreadState->m_lastSentMsg);
TRACE1("Warning: Uncaught exception in WindowProc (returning %ld).\n",
lResult);
}
else
{
TRACE0("Warning: Uncaught exception in WindowProc.\n");
lResult = 0;
}
DELETE_EXCEPTION(e);
}
END_CATCH_ALL

yogy 2007-09-07 02:23 PM

回复: Visual C++ MFC 中常用宏的含义
 
下面这个宏,可以用在带提示的ASSERT
#ifdef _DEBUG
 #define ASSERT_MSG(e,msg) if(!(e)){AfxMessageBox(msg);ASSERT(0);}
#else
  #define AASSERT_MSG(e,msg)
#endif//

yogy 2007-09-07 02:23 PM

回复: Visual C++ MFC 中常用宏的含义
 
Assert使用
  assert需要用在程序员认为肯定不会出错,或者不能容忍的错误的地方;而不能用在有可能出现的错误地方,比如:网络连接、数据库连接等等。


所有的时间均为北京时间。 现在的时间是 02:03 AM.