Obtém informações de diagnóstico sobre a última exceção gerada. As informações sobre a última exceção geradas no encadeamento atual são retornadas em uma estrutura de saída CCI_EXCEPTION_WIDE_ST. A extensão definida pelo usuário utiliza essa função para determinar se qualquer recuperação é requerida quando a função do utilitário retorna um código de erro.
É possível chamar esta função, quando uma função de utilitário ou retorno de chamada de saída de usuário indica que ocorreu uma exceção, configurando returnCode como CCI_EXCEPTION.
A menos que CCI_EXCEPTION seja indicado, você não deve chamar cciGetLastExceptionDataW() porque ele retorna resultados imprevisíveis.
void* cciGetLastExceptionDataW(
int* returnCode,
CCI_EXCEPTION_WIDE_ST* exception_st);
O valor retornado no campo exception_st.messageNumber, para exceções que resultem em uma mensagem de exceção BIP catalogada, contém o nível da mensagem nos bytes de ordem superior e o número da mensagem BIP nos quatro bytes inferiores.
Nenhum. Se ocorrer um erro, o parâmetro returnCode indica o motivo do erro.
typedef struct exception_wide_st {
int versionId; /* Identificação de versão de estrutura */
int type; /* Tipo de exceção */
int messageNumber; /* Número da mensagem */
int insertCount; /* Número de inserções da mensagem */
CCI_STRING_ST inserts[CCI_MAX_EXCEPTION_INSERTS];
/* Matriz de áreas de inserções de mensagens */
const char* fileName; /* Origem: nome do arquivo */
int lineNumber; /* Origem: número da linha no arquivo */
const char* functionName; /* Origem: nome da função */
CCI_STRING_ST traceText; /* Texto de rastreio associado à exceção */
CCI_STRING_ST objectName; /* Nome do objeto */
CCI_STRING_ST objectType; /* Tipo de objeto */
} 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));