Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   D7 Unterschiedliches Fehlerverhalten IDE / Standalone (https://www.delphipraxis.net/172436-d7-unterschiedliches-fehlerverhalten-ide-standalone.html)

arc 3. Jan 2013 16:10

D7 Unterschiedliches Fehlerverhalten IDE / Standalone
 
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!

Bernhard Geyer 3. Jan 2013 16:21

AW: D7 Unterschiedliches Fehlerverhalten IDE / Standalone
 
Inherited Create aufrufen?
Würde mir so auffallen wenn TFunctionList nicht direkt von Tobject abgeleitet ist.

arc 3. Jan 2013 17:42

AW: D7 Unterschiedliches Fehlerverhalten IDE / Standalone
 
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;

arc 3. Jan 2013 17:57

AW: D7 Unterschiedliches Fehlerverhalten IDE / Standalone
 
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.

samso 3. Jan 2013 18:13

AW: D7 Unterschiedliches Fehlerverhalten IDE / Standalone
 
Bei solchen Fehlern würde ich Schreibzugriffe auf bereits anderweitig verwendete Speciherbereiche in Betracht ziehen. Hast Du den FulldebubMode von FastMM aktiviert?

arc 3. Jan 2013 18:33

AW: D7 Unterschiedliches Fehlerverhalten IDE / Standalone
 
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...

arc 3. Jan 2013 20:04

AW: D7 Unterschiedliches Fehlerverhalten IDE / Standalone
 
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 8-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:31 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