Esta función crea una instancia de la fábrica de analizadores especificada en el intermediario.
Sólo se debe invocar en la función de inicialización bipGetParserFactory, a la que se llama cuando el intermediario carga el archivo LIL. Si se llama a cpiCreateParserFactory posteriormente, 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 analizadores. 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:
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 analizadores 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 la fábrica de analizadores */
}
/* Devolver la dirección de este objeto de fábrica al intermediario */
return(factoryObject);
}