ハンドラ関数は次の形式にします。
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__ );