![]() |
Portierung von Units aus anderen Pascal Dialekten + WDOSX
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:
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
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. 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 |
Re: Portierung von Units aus anderen Pascal Dialekten + WDOS
Hallo Neuling,
Zitat:
Grüße vom marabu |
Re: Portierung von Units aus anderen Pascal Dialekten + WDOS
Hallo Marabu!
Erst mal Danke für die Antwort. Ich habe das Testprojekt mit Delphi 3 geschrieben. Hab außerdem noch D7 Personal verfügbar. Leider klappt das auch mit der Textdatei nicht. Es wird einfach erst gar keine Datei geschrieben, was mir völlig unklar ist. Gegenüber oben habe ich folgendes geändert:
Delphi-Quellcode:
Den übergebenen Dateinamen 'Errors.log' habe ich sicherheitshalber in 'Errors.txt' umbenannt, falls intern die Dateiendung irgendwo ausgewertet werden sollte, was ich aber nicht glaube. Aber man weiß ja nie.
procedure WriteErrorsToFile(Name: String; grMsg:TGraphErrors);
var f: Text; begin try try Assignfile(f,Name); if not FileExists(Name) then Rewrite(f); if FileExists(Name) then Append(f); writeln(f,grMsg.grMessage); finally Closefile(f); end; except writeln('### FEHLER: In die Datei konnte nicht geschrieben werden! ###'); end; end; Normalerweise müßte ja wenigstens die Exception ausgelöst werden und die Meldung sichtbar werden. Nichts dergleichen passiert jedoch. In den Umgebungsoptionen habe ich in "Bei Exceptions anhalten" das Häkchen drin. Bin ratlos Traudix |
Re: Portierung von Units aus anderen Pascal Dialekten + WDOS
Zitat:
hast Du mal geprüft welches das "Akutelle Verzeichniss" ist? Da Du keinen Pfad angiebst würde ja bei Dir die Datei in dieses geschrieben. Eventuell wäre es zum testen gut mal
Code:
Zu nehmen. Oder, noch besser den Pfad in dem deine Anwendung steht zu ermitteln.
writeErrorsTofile('c:\Errors.log',graphMessage);
|
DP-Maintenance
Dieses Thema wurde von "Sharky" von "Klatsch und Tratsch" nach "Object-Pascal / Delphi-Language" verschoben.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz