Diese Funktion erstellt eine einzelne Instanz der genannten Parser-Factory im Broker.
Sie darf nur in der Initialisierungsfunktion bipGetParserFactory aufgerufen werden, die aufgerufen wird, wenn die LIL-Datei vom Broker geladen wird. Wenn cpiCreateParserFactory zu einem späteren Zeitpunkt aufgerufen wird, sind die Ergebnisse unvorhersehbar.
CciFactory* cpiCreateParserFactory(
int* returnCode,
CciChar* name);
Falls erfolgreich, wird die Adresse des Parser-Factory-Objekts zurückgegeben. Andernfalls wird als Wert null (CCI_NULL_ADDR) zurückgegeben, und der Rückkehrcode gibt den Grund für den Fehler an.
Das folgende Beispiel stammt aus der Musterparserdatei BipSampPluginParser.c:
void LilFactoryExportPrefix * LilFactoryExportSuffix bipGetParserFactory()
{
/* Variablen deklarieren */
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();
/* Funktionstabelle mit Zeigern auf Parserimplementierungsfunktionen erstellen */
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;
/* Die Parser-Factory für dieses Plug-in erstellen */
factoryObject = cpiCreateParserFactory(&rc, constParserFactory);
if (factoryObject) {
/* Die von der Factory unterstützten Nachrichtenklassen definieren */
cpiDefineParserClass(&rc, factoryObject, constPXML, &vftable);
}
else {
/* Fehler: Parser-Factory kann nicht erstellt werden */
}
/* Adresse dieses Factory-Objekts an den Broker zurückgeben */
return(factoryObject);
}