Obtém informações de diagnóstico sobre a última exceção gerada. Informações sobre a última exceção gerada no encadeamento atual são retornadas em uma estrutura de saída CCI_EXCEPTION_ST. A extensão definida pelo usuário pode utilizar essa função para determinar se alguma recuperação é necessária quando uma função utilitária 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 uma exceção ocorreu, configurando returnCode como CCI_EXCEPTION.
Você deve chamar cciGetLastExceptionData() apenas quando CCI_EXCEPTION é indicado; em outros momentos, a função retorna resultados imprevisíveis.
O traceText associado à exceção é convertido em um char*, se o char* for US-ASCII. Se traceText estiver em outra linguagem, use cciGetLastExceptionDataW e sua estrutura CCI_EXCEPTION_WIDE_ST associada, que armazena o traceText como UTF-16.
Se a exceção tiver sido levantada pelo broker, ou por cciThrowExceptionW, o elemento traceText da estrutura CCI_EXCEPTION_ST será uma cadeia vazia.
void* cciGetLastExceptionData(
int* returnCode,
CCI_EXCEPTION_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.
Nenhuma. Se ocorrer um erro, o parâmetro returnCode indica o motivo do erro.
typedef struct exception_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 */
const char* traceText; /* Texto de rastreio associado à exceção */
CCI_STRING_ST objectName; /* Nome do objeto */
CCI_STRING_ST objectType; /* Tipo de objeto */
} CCI_EXCEPTION_ST;
char msgnumTypeStr[64];
CCI_EXCEPTION_ST exception_st = malloc(sizeof(CCI_EXCEPTION_ST));
int rc = 0;
memset(&exception_st,0,sizeof(exception_st));
cciGetLastExceptionData(&rc, &exception_st);
sprintf(msgnumTypeStr, "MsgNum: %d Type: %d",
(exception_st.messageNumber & 0x0ffff),
(exception_st.type & 0x0f));