Einzelnen Beitrag anzeigen

Traudix

Registriert seit: 6. Mär 2005
Ort: Hannover
16 Beiträge
 
#1

Portierung von Units aus anderen Pascal Dialekten + WDOSX

  Alt 21. Mai 2005, 19:28
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
Suche die Herausforderung!
  Mit Zitat antworten Zitat