Diese Funktion definiert den Namen einer Parserklasse, 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* Factory-Objekt,
CciChar* name,
CPI_VFT* functbl);
Keine. Wenn ein Fehler auftritt, gibt returnCode 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: Parserfactory kann nicht erstellt werden */
}
/* Adresse dieses Factoryobjekts an den Broker zurückgeben */
return(factoryObject);
}