AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Portierung von Units aus anderen Pascal Dialekten + WDOSX
Thema durchsuchen
Ansicht
Themen-Optionen

Portierung von Units aus anderen Pascal Dialekten + WDOSX

Ein Thema von Traudix · begonnen am 21. Mai 2005 · letzter Beitrag vom 22. Mai 2005
Antwort Antwort
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
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Portierung von Units aus anderen Pascal Dialekten + WDOS

  Alt 21. Mai 2005, 21:50
Hallo Neuling,

Zitat von Traudix:
Delphi-Quellcode:
//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;
keine Ahnung, was du da so alles treibst, aber besser du machst aus dem logfile ein Textfile und nimmst statt Rewrite an dieser Stelle Append(). Du hast vergessen zu sagen, welche Delphi Version du benutzt, aber wenn du für WIN32 schreibst, dann solltest du einmal mit SizeOf(TGraphErrors) prüfen, ob du wirklich das wegschreibst, was du willst.

Grüße vom marabu
  Mit Zitat antworten Zitat
Traudix

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

Re: Portierung von Units aus anderen Pascal Dialekten + WDOS

  Alt 22. Mai 2005, 08:39
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:
 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;
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.

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
Suche die Herausforderung!
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Portierung von Units aus anderen Pascal Dialekten + WDOS

  Alt 22. Mai 2005, 08:46
Zitat von Traudix:
.
.
.
writeErrorsTofile('Errors.log',graphMessage); //Die Datei wird nicht geschrieben
.
.
.
Hai Traudix,

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:
writeErrorsTofile('c:\Errors.log',graphMessage);
Zu nehmen. Oder, noch besser den Pfad in dem deine Anwendung steht zu ermitteln.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
22. Mai 2005, 08:46
Dieses Thema wurde von "Sharky" von "Klatsch und Tratsch" nach "Object-Pascal / Delphi-Language" verschoben.
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz