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