Diese Funktion erstellt eine einzelne Instanz der angegebenen Parser-Factory. Sie darf nur in der Initialisierungsfunktion bipGetParserFactory aufgerufen werden, die aufgerufen wird, wenn die LIL vom Nachrichtenbroker geladen wird. Wenn cpiCreateParserFactory zu einem anderen Zeitpunkt aufgerufen wird, sind die Ergebnisse unvorhersehbar.
CciFactory* cpiCreateParserFactory( int* returnCode, CciChar* name);
Bei erfolgreicher Ausführung wird die Adresse des Parser-Factory-Objekts zurückgegeben. Andernfalls wird der Wert null (CCI_NULL_ADDR) zurückgegeben, und returnCode gibt die Fehlerursache an.
Dieses Beispiel wurde aus der Parser-Beispieldatei BipSampPluginParser.c entnommen (Zeile 862 bis 901):
void LilFactoryExportPrefix * LilFactoryExportSuffix bipGetParserFactory() { /* Declare variables */ CciFactory* factoryObject; int rc; static CPI_VFT vftable = {CPI_VFT_DEFAULT}; /* Vor dem Fortfahren müssen alle statischen Konstanten initialisiert werden, */ /* die unter Umständen von dem Plug-in verwendet werden. */ initParserConstants(); /* Konfigurations-Funktionstabelle mit Zeigern auf Parser-Implementierungsfunktionen */ 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; /* Erstellen der Parser-Factory für dieses Plug-in */ factoryObject = cpiCreateParserFactory(&rc, constParserFactory); if (factoryObject) { /* Definition der Nachrichtenklassen, die von dieser Factory unterstützt werden */ cpiDefineParserClass(&rc, factoryObject, constPXML, &vftable); } else { /* Fehler: Parser-Factory kann nicht erstellt werden */ } /* Rückkehradresse dieses Factory-Objekts zum Broker */ return(factoryObject); }