您的位置:网站首页 > Proe教程

修正Pro/INTRALINK Toolkit函数返回错误的方法

时间:2011-02-24 09:39:31 来源:

  本文介绍了修正Pro/INTRALINK Toolkit函数返回错误的相关方法。

  每个Pro/INTRALINK Toolkit的函数都将返回一个代码值标识成功或失败。

  如果函数成功完成,则返回PDM_SUCCESS。如果函数处理失败,会返回不同的错误代码,还有附加的错误信息,错误代码和错误信息被放置在一个全局的错误堆栈中,程序在退出之前永远不会自动清除这个错误堆栈,所以一旦有错误发生时,程序必须主动去清除错误堆栈,否则,由于错误堆栈中一直非空,将导致之后所有的INTRALINK函数都将返回失败。

  所以,建议写一个函数,如checkError(PROERROR err),当调用每个INTRALINK函数时,同时调用该函数,如果返回错误,则除了显示错误信息,同时还需要清空错误堆栈。如:

  ...

  err = PDMTakeLicense();

  checkError(err);

  ...

  void checkError(PTCERROR err)

  {

  int i, ctr = 0;

  FILE * fp;

  HPDMERROR errhandle;

  HPDMCURSOR errstack = NULL_HPDMCURSOR;

  PDM_ERROR_INFO errinfo;

  //返回成功,无需处理

  if (err == PDM_SUCCESS)

  return;

  //返回错误,获取错误堆栈,显示错误信息

  err = PDMErrorGetStack( &errstack );

  if (!PDM_HANDLE_IS_NULL(errstack))

  {

  for (PDMCursorGetNext(errstack, &errhandle); !PDM_HANDLE_IS_NULL(errhandle); PDMCursorGetNext(errstack, &errhandle))

  {

  ctr++;

  err = PDMErrorGetDetails( errhandle, &errinfo );

  printf( "For error stack %d ", ctr );

  printf( " The error code is %d ", errinfo.m_error_code );

  for ( i = 0; i < errinfo.m_argument_count; i++ )

  {

  printf( " Argument %d - %s ", i+1, errinfo.m_arguments[ i ]);

  }

  }

  }

  //输出

  err = PDMErrorDumpStack( NULL );

  //清空错误堆栈

  err = PDMErrorClearStack( );

  }