Cria uma única instância da fábrica de analisador nomeada no intermediário de mensagens. Ela deve ser chamada somente na função de inicialização bipGetParserFactory que é chamada quando a 'lil' é carregada pelo intermediário de mensagens. Se cpiCreateParserFactory for chamada em qualquer outro momento, os resultados são imprevisíveis.
CciFactory* cpiCreateParserFactory( int* returnCode, CciChar* name);
Se bem-sucedida, o endereço do objeto de fábrica de analisador é retornado. Caso contrário, um valor de zero (CCI_NULL_ADDR) é retornado e returnCode indica a razão do erro.
Este exemplo foi tirado do arquivo do analisador de amostra BipSampPluginParser.c (linhas 862 a 901):
void LilFactoryExportPrefix * LilFactoryExportSuffix bipGetParserFactory() { /* Declarar variáveis */ CciFactory* factoryObject; int rc; static CPI_VFT vftable = {CPI_VFT_DEFAULT}; /* Antes de prosseguir é preciso inicializar todas as constantes estáticas */ /* que podem ser utilizadas pelo plug-in. */ initParserConstants(); /* Configurar a tabela de função com ponteiros para funções de implementação de analisador */ 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; /* Criar a fábrica de analisador para este plugin */ factoryObject = cpiCreateParserFactory(&rc, constParserFactory); if (factoryObject) { /* Definir as classes de mensagem suportadas pela fábrica */ cpiDefineParserClass(&rc, factoryObject, constPXML, &vftable); } else { /* Erro: Incapaz de criar a fábrica de analisador */ } /* Retornar o endereço deste objeto de fábrica para o intermediário */ return(factoryObject); }