Crea una singola istanza del produttore del programma di analisi specificato nel broker di messaggi. Deve essere richiamata solo nella funzione di inizializzazione bipGetParserFactory che viene richiamata quando il broker di messaggi carica la LIL. Se cpiCreateParserFactory viene richiamata in un altro momento, i risultati sono imprevedibili.
CciFactory* cpiCreateParserFactory( int* returnCode, CciChar* name);
Se ha esito positivo, viene restituito l'indirizzo dell'oggetto produttore del programma di analisi. Altrimenti, viene restituito un valore zero (CCI_NULL_ADDR) e il parametro returnCode indica il motivo dell'errore.
Questo esempio è estratto dal file del programma di analisi di esempio BipSampPluginParser.c (da riga 862 a 901):
void LilFactoryExportPrefix * LilFactoryExportSuffix bipGetParserFactory() { /* Dichiara le variabili */ CciFactory* factoryObject; int rc; static CPI_VFT vftable = {CPI_VFT_DEFAULT}; /* Prima di procedere è necessario inizializzare tutte le costanti statiche */ /* che il plug-in potrebbe utilizzare. */ initParserConstants(); /* Imposta tabella funzioni con puntatori sulle funzioni di implementazione del programma di analisi */ 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; /* Crea il produttore del programma di analisi per questo plugin */ factoryObject = cpiCreateParserFactory(&rc, constParserFactory); if (factoryObject) { /* Definisce le classi di messaggi previste dal produttore */ cpiDefineParserClass(&rc, factoryObject, constPXML, &vftable); } else { /* Errore: Impossibile creare il produttore del programma di analisi */ } /* Restituisce l'indirizzo di questo oggetto produttore al broker */ return(factoryObject); }