cpiCreateParserFactory

Finalidad

Esta función crea una sola instancia de la fábrica del analizador nombrada en el intermediario de mensajes. Sólo debe invocarse 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.

Sintaxis

CciFactory* cpiCreateParserFactory(
  int*      returnCode,
  CciChar*  name);

Parámetros

returnCode
Recibe el código de retorno de la función (salida).
name
Especifica el nombre de la fábrica que se va a crear (entrada).

Valores de retorno

Si la función se ejecuta correctamente, se devuelve la dirección del objeto de fábrica del analizador. De lo contrario, se devuelve el valor cero (CCI_NULL_ADDR), y returnCode indica la causa del error.

Ejemplo

Este ejemplo se ha tomado del archivo de analizador de ejemplo BipSampPluginParser.c (de la línea 862 a la 901):

void LilFactoryExportPrefix * LilFactoryExportSuffix bipGetParserFactory()
{
  /* Declarar variables                                                  */
  CciFactory*     factoryObject;
  int             rc;
  static CPI_VFT  vftable = {CPI_VFT_DEFAULT};

  /* Antes de seguir, debemos inicializar todas las constantes estáticas */
  /* que el plug-in pueda utilizar.                                      */
  initParserConstants();

  /* Configurar tabla de funciones con punteros para analizar funciones  */
  /* de implementación                                                   */
  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 del analizador para este plug-in                   */
  factoryObject = cpiCreateParserFactory(&rc, constParserFactory);
  if (factoryObject) {
    /* Definir las clases de mensaje que soporta la fábrica              */
    cpiDefineParserClass(&rc, factoryObject, constPXML, &vftable);
  }
  else {
    /* Error: No se ha podido crear la fábrica del analizador            */
  }

  /* Devolver dirección de este objeto de fábrica al intermediario       */
  return(factoryObject);
}

Conceptos relacionados
Analizadores definidos por el usuario
Extensiones definidas por el usuario

Tareas relacionadas
Creación de un analizador en C

Referencia relacionada
cpiDefineParserClass
Funciones de programa de utilidad de analizador