Problemübersicht:
Alternatives Projekt zur Windows-CGI-Lösung
FStdOut.Write(Text[1], Byte(Text[0])); (1x) StdOutFile.Write(Text[1], Byte(Text[0])); (5x) |
Delphi 2/3 meckert: "Auf Element 0 kann nicht zugegriffen werden!" Die Korrektur lautet:
FStdOut.Write(Text[1], Byte(Length(Text))); bzw. StdOutFile.Write(Text[1], Byte(Length(Text))); |
Damit ist die Komponente CGI sauber an Delphi 2/3 angepaßt.
procedure GetContentData(var Liste: TStringList); {neue Version fuer Delphi2} var pCont: PChar; ContStream: TFileStream; sPair: String; i: Integer; begin GetMem(pCont,CGI1.Profile.ContentLength); ContStream:=TFileStream.Create(CGI1.Profile.ContentFile,fmOpenRead); ContStream.Read(pCont^,CGI1.Profile.ContentLength); ContStream.Free; i:=0; sPair:=''; while i<CGI1.Profile.ContentLength do begin case (pCont+i)^ of {Sonderzeichen behandeln} '+': sPair:=sPair+' '; '%': begin sPair:=sPair+Chr(16*HxToInt((pCont+i+1)^)+HxToInt((pCont+i+2)^)); Inc(i,2); end; '&': begin Liste.Add(sPair); sPair:='' end; else sPair:=sPair+(pCont+i)^; end; Inc(i,1); end; Liste.Add(sPair); FreeMem(pCont,CGI1.Profile.ContentLength); end; |
Anwendungsfehler Exception EDatabase Error in Modul CGITELBU.EXE bei 0001.3183 Bei der Initialisierung der Borland DataBase Engine ist ein Fehler aufgetreten (Fehler $2108) |
Nach intensivem Suchen hat sich folgendes ergeben:
In der Unit CGI und der Unit TUPLES der Freewarekomponente von M.B.Klein steht jeweils im Interface-Teil:
uses Classes, DBTables, Forms,.... |
Damit wird die Borland-Database initialisiert, obgleich das für das Projekt nicht notwendig ist. Und wenn jemand die BDE gar nicht installiert hat, gibt's natürlich den genannten Fehler.
Die Lösung ist wieder einfach:
Entfernen Sie einfach den "DBTables"-Eintrag in der USES-Anweisung beider Units. Sie sind für mein Vorhaben nicht notwendig. Außerdem wird dadurch die EXE um ca. 10...20 KByte kleiner.
Nicht jeder Server hat die Windows-CGI-Schnittstelle zur Unterstuetzung dieser Technologie. Getestet wurde mit dem Server Omni-HTTPd unter Win95 ( http://www.omnicron.ab.ca/httpd/ ).
Der MS-Personal-WebServer oder der IIS gehen definitiv nicht. Für diese Server empfehle ich Standard-CGI (siehe meine alternative Lösung), das unter http://www.rrz.uni-hamburg.de/philsem/stefan_mueller/wincgi/index.html prima beschrieben ist.
In Anbetracht der der vielen Anfragen zu meinem Artikel im PC-Magazin DOS 10/97 habe ich mich entschlossen, einen zusätzlichen Service einzurichten.
Ich verwende nun Standard-CGI. Das bedeutet aber, daß unbedingt eine 32-bit-EXE erzeugt werden muß, die als Konsolen-Anwendung läuft. Delphi1-Programmierer gucken mit dieser neuen Variante in den Mond. Die (einzige) Projektdatei dazu ist bei mir unter CgiTelef.pas zu haben. Ich habe das Projekt möglichst 1 zu 1 auf Standard-CGI umgesetzt. Dabei konnte ich aber nicht immer auf schönen Programmierstil achten. Bessermachen ist erlaubt. Es wird für Standard-CGI keine Freeware-Komponente mehr benötigt.
Gebrauchsanleitung:
Das Script legt wie das Original-Projekt die Daten des Telefonbuches in die Datei C:\Dat\TeleBuch.txt. Das Verzeichnis und die Datei werden selbständig angelegt.
J. Hummel, 1997