Hallo Delphianer!
Ich beschäftige mich grad mit WDOSX. Ich habe die Grafik-Units aus Freepascal nach Delphi portiert und hatte gehofft,
das ich nun auch Grafikanwendungen für dieses System schreiben kann. Leider klappt das noch nicht. Nun will ich den
konkreten Grafikfehler in eine Datei schreiben, die ich später auslesen will, um anhand des Fehlercodes einen Anhaltspunkt
zu gewinnen, was denn noch falsch läuft. Leider wird jedoch die Protokolldatei mit dem Namen 'ERRORS.LOG' nicht geschrieben.
Warum nicht?
Hier ist mein Quelltext (Hauptprogramm)
Delphi-Quellcode:
program graftest;
{$I wdosx.inc} //paar Definitionen
{$define dpmi} //dpmi Mode einstellen
uses SysUtils,
Classes,
Crt,
//Crt,Dos und Dpmi sind Bestandteil von WDOSX
Dos,
Dpmi,
vbe,
//die WDOSX VESA Definitionen
graph,
//aus Freepascal nach Delphi portiert (leider noch fehlerhaft
globals
in '
globals.pas',
//einige globale Routinen
wdxGraphics;
//eine für WDOSX entstehende Grafik-Unit, in die alles Grafik-Zeug später rein soll
type
TGraphErrors =
record //Die Datenstruktur für meine Fehlermeldung
grCode: Integer;
grMessage:
string;
end;
type
TKeyBufferRec =
record
case integer
of
0: (KeyCode: Word);
1: (key,scan: char);
2: (wKey,wScan: Byte);
end;
var
graphDriver: smallInt;
//der gefundene Grafiktreiber
graphMessage: TGraphErrors;
//Meine Fehlermeldung
graphmode: smallInt;
//der gefundene GrafikModus (wird wahrscheinlich erst mal vorgegeben)
graphPath:
String;
//BGI Pfad
KeyCode: Char;
ScanCode: Char;
Xpos,YPos: Integer;
//Diese Prozedur soll die erhaltene Fehlermeldung in eine Datei schreiben,
//die ich später auswerten will, um Fehlerhinweis zu erhalten
procedure WriteErrorsToFile(
Name:
String; grMessage:TGraphErrors);
var f:
file;
begin
try
try
Assignfile(f,
Name);
Rewrite(f);
blockwrite(f,grMessage,sizeof(grMessage));
finally
Closefile(f);
end;
except
writeln('
### FEHLER: In die Datei konnte nicht geschrieben werden! ###');
end;
end;
//Nach InitGraph wird eine numerische Variable graphResult mit einem Fehlercode besetzt.
//Den übersetze ich hier in eine verständliche Fehlermeldung
function getGraphMessage(ofGrResult: Integer):
String;
begin
case ofGrResult
of
grOk: getGraphMessage := '
';
//Initialisierung hat geklappt, Grafikmodus eingestellt
grNoInitGraph: getGraphMessage := '
BGI Grafiktreiber nicht geladen';
grNotDetected: getGraphMessage := '
Kein grafikfähiger Adapter vorhanden';
grFileNotFound: getGraphMessage := '
Device-Driver Datei nicht gefunden';
grInvalidDriver: getGraphMessage := '
Grafíktreiberdatei defekt';
grNoLoadMem: getGraphMessage := '
Zu wenig Hauptspeicher für den Grafiktreiber';
grNoScanMem: getGraphMessage := '
Zu wenig Hauptspeicher für Grafikroutinen';
grNoFloodMem: getGraphMessage := '
Zu wenig Hauptspeicher für FloodFill';
grFontNotFound: getGraphMessage := '
Schriftdatei nicht gefunden';
grNoFontMem: getGraphMessage := '
Zu wenig Hauptspeicher zum Laden der Schrift';
grInvalidMode: getGraphMessage := '
Grafikmodus wird vom Treiber nicht unterstützt';
grError: getGraphMessage := '
Nicht näher klassifizierbarer Fehler';
grIoError: getGraphMessage := '
E/A Fehler beim Laden von Dateien';
grInvalidFont: getGraphMessage := '
Ungültige Schriftdatei';
grInvalidFontNum: getGraphMessage := '
Kennziffer für Zeichensatz nicht definiert';
end;
end;
begin
graphPath := '
c:\Programme\Borland\Delphi 3\Eigene\Projekte\Dwpl\Desgnforms\graf\bgi';
//graphmode := m1024x768x256;
InitGraph(graphDriver,graphmode,graphPath);
if graphResult = grOk
then
begin
XPos := 8; YPos := 8;
with graphMessage
do
begin
grCode := graphResult;
grMessage := getGraphMessage(graphResult);
end;
writeErrorsTofile('
Errors.log',graphMessage);
//Die Datei wird nicht geschrieben
CloseGraph;
end else //Wenn Fehler bei Initialisierung der Grafik
begin
with graphMessage
do
begin
grCode := graphResult;
grMessage := getGraphMessage(graphResult);
end;
writeErrorsTofile('
Errors.log',graphMessage);
//Auch hier wird die Datei nicht geschrieben
end;
//warum?
end.
Beim googeln bin ich auf das GRX Projekt gestoßen. Villeicht ist das ja mein Freund. Aber die vorlompilierten Dateien liegen im .a Format (GNU-C) vor. Kann ich das mit Binobj.exe nach Intelformat .obj umwandeln, damit die Bibliothek mit Delphi und ggf. Turbo/Borland Pascal
verwendbar ist?
in der Pascal-Portierung des Grafikinterface GRX steht hinter den Routinen die Direktive ASMNAME 'xxx'. Ist das das gleiche wie NAME 'xxx' hinter Routinen, die in .DLL-s definiert sind?
Wer kann mir hier helfen?
Traudix