Definiert den Namen einer Parserklasse, die von einer Parserfactory 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* Rückkehrcode, CciFactory* Factoryobjekt, CciChar* Name, CPI_VFT* functbl);
Keine. Wenn ein Fehler auftritt, gibt der Rückkehrcode den Grund für den Fehler an.
Dieses Beispiel stammt aus der Musterparserdatei BipSampPluginParser.c (Zeile 862 bis 901):
void LilFactoryExportPrefix * LilFactoryExportSuffix bipGetParserFactory() { /* Variablen deklarieren */ CciFactory* Factoryobjekt; 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 Parserfactory 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: Parserfactory kann nicht erstellt werden */ } /* Adresse dieses Factoryobjekts an den Broker zurückgeben */ return(factoryObject); }