Define el nombre de una clase de analizador soportada por una fábrica de analizador. functbl es un puntero a una tabla de funciones virtual que contiene punteros a las funciones de implementación en C, es decir, las funciones que proporcionan la función del propio analizador.
void cpiDefineParserClass( int* returnCode, CciFactory* factoryObject, CciChar* name, CPI_VFT* functbl);
Ninguno. Si se produce un error, returnCode indica la razón del mismo.
Este ejemplo se ha tomado del archivo de analizador de ejemplo BipSampPluginParser.c (líneas 862 a 901):
void LilFactoryExportPrefix * LilFactoryExportSuffix bipGetParserFactory() { /* Declarar variables */ CciFactory* factoryObject; int rc; static CPI_VFT vftable = {CPI_VFT_DEFAULT}; /* Antes de continuar es necesario inicializar todas las constantes estáticas */ /* que es posible que utilice el plug-in. */ initParserConstants(); /* Configurar tabla de funciones con punteros a funciones de implementación de analizador */ vftable.iFpCreateContext = cpiCreateContext; vftable.iFpParseBufferEncoded = cpiParseBufferEncoded; vftable.iFpParseFirstChild = cpiParseFirstChild; vftable.iFpParseLastChild = cpiParseLastChild; vftable.iFpParsePreviousSibling = cpiParsePreviousSibling; vftable.iFpParseNextSibling = cpiParseNextSibling; vftable.iFpWriteBufferEncoded = cpiWriteBufferEncoded; vftable.iFpDeleteContext = cpiDeleteContext; vftable.iFpSetElementValue = cpiSetElementValue; vftable.iFpElementValue = cpiElementValue; vftable.iFpNextParserClassName = cpiNextParserClassName; vftable.iFpSetNextParserClassName = cpiSetNextParserClassName; vftable.iFpNextParserEncoding = cpiNextParserEncoding; vftable.iFpNextParserCodedCharSetId = cpiNextParserCodedCharSetId; /* Crear la fábrica de analizador para este plug-in */ factoryObject = cpiCreateParserFactory(&rc, constParserFactory); if (factoryObject) { /* Definir las clases de mensaje soportadas por la fábrica */ cpiDefineParserClass(&rc, factoryObject, constPXML, &vftable); } else { /* Error: No se ha podido crear fábrica de analizador */ } /* Devolver la dirección de este objeto de fábrica al intermediario */ return(factoryObject); }