Esta função cria uma única instância da factory do analisador denominado no broker.
Ela deve ser chamada apenas na função de inicialização bipGetParserFactory, que é chamada quando o arquivo LIL é carregado pelo broker. Se cpiCreateParserFactory for chamado posteriormente, os resultados serã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 é obtido do arquivo analisador de amostra BipSampPluginParser.c:
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);
}