生成される最後の例外についての診断情報を取得します。 現行のスレッドで生成される最後の例外についての情報は、CCI_EXCEPTION_WIDE_ST 出力構造に戻されます。 このユーザー定義拡張機能ではこの関数を使用して、 ユーティリティー関数がエラー・コードを戻すときにリカバリーが必要かどうかを判別します。
この関数は、ユーティリティー関数またはユーザー出口コールバックが returnCode を CCI_EXCEPTION に設定することによって例外が発生したことを示したときに呼び出すことができます。
CCI_EXCEPTION が示された場合以外は、cciGetLastExceptionDataW() を呼び出さないでください。予測不能の結果が戻されるからです。
void* cciGetLastExceptionDataW(
int* returnCode,
CCI_EXCEPTION_WIDE_ST* exception_st);
BIP にカタログされている例外メッセージになる例外の場合、exception_st.messageNumber フィールドで戻される値の高位バイトにはメッセージ・レベル、下位 4 バイトには BIP メッセージ番号が含まれます。
なし。 エラーが発生した場合、returnCode パラメーターがエラーの理由を示します。
typedef struct exception_wide_st {
int versionId; /* Structure version identification */
int type; /* Type of exception */
int messageNumber; /* Message number */
int insertCount; /* Number of message inserts */
CCI_STRING_ST inserts[CCI_MAX_EXCEPTION_INSERTS];
/* Array of message insert areas */
const char* fileName; /* Source: file name */
int lineNumber; /* Source: line number in file */
const char* functionName; /* Source: function name */
CCI_STRING_ST traceText; /* Trace text associated with exception */
CCI_STRING_ST objectName; /* Object name */
CCI_STRING_ST objectType; /* Object type */
} CCI_EXCEPTION_WIDE_ST;
char msgnumTypeStr[64];
CCI_EXCEPTION_WIDE_ST exception_st = malloc(sizeof(CCI_EXCEPTION_WIDE_ST));
int rc = 0;
memset(&exception_st,0,sizeof(exception_st));
cciGetLastExceptionDataW(&rc, &exception_st);
sprintf(msgnumTypeStr, "MsgNum: %d Type: %d",
(exception_st.messageNumber & 0x0ffff),
(exception_st.type & 0x0f));