Crea en el intermediario de mensajes una sola instancia de la fábrica de analizador mencionada. Sólo se debe invocar en la función de inicialización bipGetParserFactory que se invoca cuando el intermediario de mensajes carga la 'lil'. Si se invoca cpiCreateParserFactory en cualquier otro momento, los resultados son imprevisibles.
CciFactory* cpiCreateParserFactory( int* returnCode, CciChar* name);
Si la ejecución se realiza satisfactoriamente, se devuelve la dirección del objeto de fábrica de analizador. De lo contrario, se devuelve un valor de cero (CCI_NULL_ADDR) y returnCode indica la razón del error.
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); }