Einzelnen Beitrag anzeigen

Caesar2012

Registriert seit: 25. Jan 2012
6 Beiträge
 
FreePascal / Lazarus
 
#1

Aufruf neuer Typen in anderen Units

  Alt 31. Jan 2012, 14:14
Aufruf neuer Typen in anderen Units


Einleitung:
Ich bin mit der Weile ein fortgeschrittener Anfänger. Zwar kann ich neue Methode, Variablen und Formen miteinander Verknüpfen, aber wenn ich manchmal meine Fehler sehe, lache ich später selbst darüber. Nun geht es darum, eine neue Unit zu erstellen (schon geschehen) und einen neuen Typen zu kreieren. Ich kann darauf zugreifen, bekomme dennoch einen "SIGSEGV"-Error, einen Zugriffserror. Ich suche nach der Lösung seit 3 Tagen und arbeitete mich durch sämtliche Anleitungen, Themen, Foren und was es alles noch so gibt. Arbeiten tue ich mit Lazarus "0.9.30.2" und Win7 32bit.


Überblick:
Mein Projekt beinhaltet die Formen Form1 vom Typ TForm1 in mainunit.lfm bzw. mainunit.pas und Form2 vom Typ TForm2 in image.lfm bzw. image.pas. Außerdem beinhaltet mein Projekt die Unit kennzeichen.pas in denen TListe und TDatensatz deklariert sind.


Problembeschreibung:
In meiner mainunit.pas befindet sich procedure TForm1.Search(SearchString: String); , welche von einer anderen Prozedur in mainunit.pas aufgerufen wird. Am Schluss des interface-Teils deklariere ich:
Delphi-Quellcode:
var
     Form1: TForm1;
     isGo: Boolean;
     unsereListe: TListe;
Die Prozedur "Search" in mainunit.passieht im "implementation"-Teil wie folgt aus:
Delphi-Quellcode:
procedure TForm1.Search(SearchString: String);
begin
     if (Length(SearchString) <> 0) and (SearchString <> Last01.Caption) then
     begin
          Form1.Enabled := False;
          StartProgressBar(25);
          Wait(3);
          ChangeLast(SearchString);
          unsereListe := unsereListe.create;
          unsereListe.dateieinlesen('kfz.csv', SearchString);
          if unsereListe.NotA = false then
          begin
               Output2.Caption := unsereListe.liste[unsereListe.anzahl].kennzeichen;
               Output4.Caption := unsereListe.liste[unsereListe.anzahl].ort;
               Output6.Caption := unsereListe.liste[unsereListe.anzahl].bundesland;
               Output8.Caption := unsereListe.liste[unsereListe.anzahl].sonder;
          end;
          while ProgressBar.Position <> 0 do Wait(2);
          Form1.Enabled := True;
     end;
end;
Durch das Durchsteppen mit F7 erfuhr ich, dass er wie befohlen
Delphi-Quellcode:
constructor TListe.create;
begin
     anzahl := 0;
     NotA := false;
end;
ohne Probleme durchläuft und erst bei
Delphi-Quellcode:
procedure TListe.dateieinlesen (datname, suchKFZ: STRING);
begin
      try
           datname := extractfilepath(ParamStr(0)) + 'lib\kfz.csv';
           CompleteFile := TStringList.Create;
           CompleteFile.LoadFromFile(datname);
           ...
      finally
           ...
      end;
end;
kläglich scheitert. Nach dem "SIGSEGV"-Error zeigt er mit die Zeile CompleteFile := TStringList.Create; an. Das heißt, er kommt erst gar nicht dazu, CompleteFile.LoadFromFile(datname); durchzuführen.

Ich habe mein Projekt auf file-upload.net hochgeladen.

P.S.:

Während ich das Thema erstellt habe, fiel mir etwas auf. Ich verschob in kennzeichen.pas CompleteFile := TStringList.Create; in die constructor TListe.create; . Schon leif dies ohne Probleme. Aber es stockte nun bei CompleteFile.LoadFromFile(datname); .




Mit freundlichen Grüßen
Caesar2012, der Moderne
  Mit Zitat antworten Zitat