ハンドラ関数は次の形式にします。
void dMessageFunction ( int errnum, const char *msg, va_list ap );
たとえば、
static void MessageHandler( int num, const char *msg, va_list ap ) { printf( "Error %d: ",num ); vprintf( msg, ap ); }
のように実装します。この場合、
Error 2: mass must be > 0 (c:\ode-0.11.1\ode\src\mass.cpp:49)
ように表示されます。これはエラーをハンドリングしなかったとき、
のように表示されるメッセージです。
引数のfnに0を渡すと、既定のハンドラが使用されます。
void dSetErrorHandler ( dMessageFunction *fn ); void dSetDebugHandler ( dMessageFunction *fn ); void dSetMessageHandler ( dMessageFunction *fn );
dSetMessageHandler( &MessageHandler );
dMessageFunction *dGetErrorHandler(); dMessageFunction *dGetDebugHandler(); dMessageFunction *dGetMessageHandler();
void dError ( int num, const char *msg, ... ); void dDebug ( int num, const char *msg, ... ); void dMessage ( int num, const char *msg, ... );
dMessage( 256, " (%s:%d)", __FILE__, __LINE__ );