Obtener información de diagnóstico acerca de la última excepción generada. Se devuelve información sobre la última excepción generada en la hebra actual en una estructura de salida CCI_EXCEPTION_ST. La extensión definida por el usuario puede utilizar esta función para determinar si se necesita una recuperación cuando una función de utilidad devuelve un código de error.
Puede llamar a esta función cuando una función de utilidad o una devolución de llamada de salida de usuario indique que se ha producido una excepción, estableciendo returnCode en CCI_EXCEPTION.
Debe llamar a cciGetLastExceptionData() sólo cuando se indique CCI_EXCEPTION; en otras ocasiones, la función devuelve resultados imprevisibles.
El elemento traceText asociado a la excepción se convierte en un char* si char* es US-ASCII. Si traceText está en otro idioma, utilice cciGetLastExceptionDataW y su estructura CCI_EXCEPTION_WIDE_ST asociada que almacena traceText como UTF-16.
Si la excepción ha sido lanzada por el intermediario, o por cciThrowExceptionW, el elemento traceText de la estructura CCI_EXCEPTION_ST es una serie vacía.
void* cciGetLastExceptionData(
int* returnCode,
CCI_EXCEPTION_ST* exception_st);
El valor devuelto en el campo exception_st.messageNumber, para excepciones que producen un mensaje de excepción catalogado BIP, contiene el nivel de mensaje en los bytes de nivel superior y el número de mensaje BIP en los cuatro bytes de nivel más bajo.
Ninguno. Si se produce un error, el parámetro returnCode indica la razón del mismo.
typedef struct exception_st {
int versionId; /* Identificación de versión de estructura */
int type; /* Tipo de excepción */
int messageNumber; /* Número de mensaje */
int insertCount; /* Número de inserciones de mensaje */
CCI_STRING_ST inserts[CCI_MAX_EXCEPTION_INSERTS];
/* Matriz de áreas de inserciones de mensaje */
const char* fileName; /* Origen: nombre de archivo */
int lineNumber; /* Origen: número de línea en archivo */
const char* functionName; /* Origen: nombre de función */
const char* traceText; /* Texto de rastreo asociado a la excepción */
CCI_STRING_ST objectName; /* Nombre de 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));