AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE D7 Unterschiedliches Fehlerverhalten IDE / Standalone
Thema durchsuchen
Ansicht
Themen-Optionen

D7 Unterschiedliches Fehlerverhalten IDE / Standalone

Ein Thema von arc · begonnen am 3. Jan 2013 · letzter Beitrag vom 3. Jan 2013
Antwort Antwort
Benutzerbild von arc
arc

Registriert seit: 6. Nov 2009
Ort: Elbflorenz
62 Beiträge
 
FreePascal / Lazarus
 
#1

D7 Unterschiedliches Fehlerverhalten IDE / Standalone

  Alt 3. Jan 2013, 17:10
Ich habe ein interessantes Phänomen und komme ihm leider nicht auf die Spur. Ich arbeite mit Delphi 7 an einem größeren Projekt mit der Asphyre eXtreme Direct X Bibliothek, MIDI IO, FastMM4 und FastMove als externe Komponenten.

Ich lade Daten aus einer Ini Datei mit einer TMemIniFile, dann werden Objekte erzeugt und in Abhängigkeit von den gelesenen Daten weiter verarbeitet. Das Projekt ist bereits seit drei Jahren aktiv und funktionierte bisher stets identisch in der IDE und als Standalone.

Da ich in der letzten Zeit immer aus der IDE heraus gestartet habe, ist mir der Fehler nicht weiter aufgefallen, erst Tester kamen auf mich zu, daß es auf einmal "nicht mehr geht".

In der IDE funktioniert der Code reibungslos, als Standalone kommt ein E/A Fehler 105 beim Laden der Daten. Schalte ich die E/A Überprüfung im Compiler ab, funktioniert auch das Standalone.

Ein Auskommentieren von Code hat mich leider gar nicht weitergebracht, ich lande bei der Anweisung
Code:
constructor TFunctionList.Create;
begin
  list:=TList.Create;
end;
Diese wird aber an zig anderen Stellen im Projekt ohne Fehler aufgerufen. Ich vermute, daß irgendwo vorher etwas schief läuft und dieser E/A Fehler eine Folge ist. Es kann natürlich auch sein, daß der Fehler gar keiner ist und in einer meiner Units oder der IDE / was auch immer zu suchen ist.

Ich bin etwas ratlos, wie ich diesem Fehler auf die Spur kommen kann, da er innerhalb der IDE nicht auftritt sind meine bisherigen Debugging Versuche auf showmessage mit status info und Code Auskommentieren beschränkt.

Was könnte diesen Fehler verursachen? Wie kann ich euch das Problem verständlicher erklären? Bin für jeden Hinweis Dankbar!
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: D7 Unterschiedliches Fehlerverhalten IDE / Standalone

  Alt 3. Jan 2013, 17:21
Inherited Create aufrufen?
Würde mir so auffallen wenn TFunctionList nicht direkt von Tobject abgeleitet ist.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von arc
arc

Registriert seit: 6. Nov 2009
Ort: Elbflorenz
62 Beiträge
 
FreePascal / Lazarus
 
#3

AW: D7 Unterschiedliches Fehlerverhalten IDE / Standalone

  Alt 3. Jan 2013, 18:42
Danke für den Hinweis! Ich hoffe nicht, daß dort das Problem liegt, hier die Deklaration:

Code:
type TFunctionList = class
                       protected
                         list:TList; // interne Liste der Funktionsblöcke

                       public
                         constructor Create; virtual;
                         function add(block:TFunctionBlock):TFunctionBlock;
                         procedure delete(block:TFunctionBlock; destroyBlock:boolean);
                         procedure deleteByIndex(block_id:integer; destroyBlock:boolean);
                         function getCount:integer;
                         function getItem(index:integer):TFunctionBlock;
                         function getBlockIndex(block:TFunctionBlock):integer;
                         procedure FlushList;
                         destructor Destroy; override;
                       end;

Geändert von arc ( 3. Jan 2013 um 18:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von arc
arc

Registriert seit: 6. Nov 2009
Ort: Elbflorenz
62 Beiträge
 
FreePascal / Lazarus
 
#4

AW: D7 Unterschiedliches Fehlerverhalten IDE / Standalone

  Alt 3. Jan 2013, 18:57
Ich versuche einmal den Weg zum vermeintlichen Fehler zu zeigen, den ich mit Auskommentieren herausbekommen habe.

Alles beginnt hier:
Code:
function TModuleList.createModule(ModuleType:integer):TModule; // erzeugt das angeforderte Modul
var m:TModule;
begin
  case ModuleType of
    CMonitorModule:  m:=TMonitorModule.Create;
...
... ruft auf:
Code:
constructor TMonitorModule.Create;
begin
  inherited Create;
  MyTypIndex:=CMonitorModule;
  FunctionLine:=TFunctionLine.Create(Self);
...
... ruft auf:
Code:
constructor TFunctionLine.Create(parentModule:TModule);
begin
  assignedModule:=parentModule;

  FunctionList:=TFunctionList.Create;
...
... ruft auf:
Code:
constructor TFunctionList.Create;
begin
  list:=TList.Create;
end;
Kommentiere ich die folgende Zeile aus, kommt der Fehler nicht. Das ergibt für mich aber 0 Sinn.
Code:
FunctionList:=TFunctionList.Create;
Falls es einen schöneren Weg gibt solche Strukturen darzustellen, bin ich für jeden Hinweis offen.
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#5

AW: D7 Unterschiedliches Fehlerverhalten IDE / Standalone

  Alt 3. Jan 2013, 19:13
Bei solchen Fehlern würde ich Schreibzugriffe auf bereits anderweitig verwendete Speciherbereiche in Betracht ziehen. Hast Du den FulldebubMode von FastMM aktiviert?

Geändert von samso ( 3. Jan 2013 um 19:18 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von arc
arc

Registriert seit: 6. Nov 2009
Ort: Elbflorenz
62 Beiträge
 
FreePascal / Lazarus
 
#6

AW: D7 Unterschiedliches Fehlerverhalten IDE / Standalone

  Alt 3. Jan 2013, 19:33
Ja, habe ich. "Leider" keine Fehler

Was kann eigentlich alles zu einem E/A Fehler 105 führen? Eventuell hängt es auch mit der Midi Komponente zusammen, diese wird allerdings im ausgeführten Code nicht angesprochen...
  Mit Zitat antworten Zitat
Benutzerbild von arc
arc

Registriert seit: 6. Nov 2009
Ort: Elbflorenz
62 Beiträge
 
FreePascal / Lazarus
 
#7

AW: D7 Unterschiedliches Fehlerverhalten IDE / Standalone

  Alt 3. Jan 2013, 21:04
Das Problem ist gelöst. Natürlich war es etwas völlig anderes...

Ich nutze eine Funktion um herauszufinden, ob mein Projekt als Konsolenvariante oder mit GUI kompiliert wurde. Diese Funktion war schuld.

Code:
function IAmAConsoleApp: Boolean;
var
  Stdout: THandle;
begin
  Stdout := GetStdHandle(Std_Output_Handle);
  Win32Check(Stdout <> Invalid_Handle_Value);
  Result := Stdout <> 0;
end;
In der IDE hat sie brav false zurückgegeben, als Standalone jedoch true!! Damit wurden Debug WriteLn() Ausgaben getriggert, was zu besagtem E/A Fehler führte. Darauf muß man erstmal kommen!

Nun habe ich es so geändert:
Code:
function IAmAConsoleApp:Boolean;
begin
{$IFDEF CONSOLE}
  result:=true;
{$ELSE}
  result:=false;
{$ENDIF}
end;
Sicher, die Funktion ist ansich überflüssig, aber ich habe sie bereits an einigen Stellen im Code eingesetzt. Und es funktioniert.

Danke an alle die geholfen haben, ich fühle mich jetzt als könnte ich Berge versetzen
  Mit Zitat antworten Zitat
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 19:38 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