cpiDefineParserClass

Zweck

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-Plug-in-Implementierungsfunktionen enthält, d. h. die Funktionen, die die Funktion des Parsers selbst bereitstellen.

Syntax

void cpiDefineParserClass(
  int*         returnCode,
  CciFactory*  factoryObject,
  CciChar*     name,
  CPI_VFT*     functbl);

Parameter

returnCode
Empfängt den Rückkehrcode von der Funktion (Ausgabe). Mögliche Rückkehrcodes sind:
  • CCI_SUCCESS
  • CCI_EXCEPTION
  • CCI_INV_FACTORY_OBJECT
  • CCI_INV_PARSER_NAME
  • CCI_PARSER_NAME_TOO_LONG
  • CCI_INV_OBJECT_NAME
  • CCI_INV_VFTP
  • CCI_MISSING_IMPL_FUNCTION
  • CCI_INV_IMPL_FUNCTION
  • CCI_NAME_EXISTS
factoryObject
Gibt die Adresse des Factory-Objekts an, das den angegebenen Parser unterstützt (Eingabe). Die Adresse wird von cpiCreateParserFactory zurückgegeben.
name
Der Name der Parser-Klasse, die definiert werden soll (Eingabe). Die maximal zulässige Länge einer Parser-Klasse beträgt 8 Zeichen.
functbl
Die Adresse der Struktur CPI_VFT, die Zeiger auf die Plug-in-Implementierungsfunktionen enthält (Eingabe).

Rückgabewerte

Keine. Wenn ein Fehler auftritt, gibt returnCode die Fehlerursache an.

Beispiel

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);
}
Zugehörige Konzepte
Benutzerdefinierte Parser
Benutzerdefinierte Erweiterungen
Zugehörige Tasks
Parser in C erstellen
Zugehörige Verweise
cpiCreateParserFactory
C-Parser-Dienstprogrammfunktionen
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2005 Letzte Aktualisierung: Nov 17, 2005
as08250_