Diese Funktion definiert den Namen einer Parser-Klasse, die von einer Parser-Factory unterstützt wird. functbl ist ein Zeiger auf eine virtuelle Funktionstabelle, die Zeiger auf die C-Implementierungsfunktionen enthält, d. h. die Funktionen, die die Funktion des Parsers selbst bereitstellen.
void cpiDefineParserClass( int* returnCode, CciFactory* factoryObject, CciChar* name, CPI_VFT* functbl);
Keine. Wenn ein Fehler auftritt, gibt returnCode die Fehlerursache an.
Dieses Beispiel wurde aus der Parser-Beispieldatei BipSampPluginParser.c entnommen (Zeile 862 bis 901):
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(); /* 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); }