Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - TStrings.Assign gibt EAbstractError
GuaAck - Di 17.04.12 23:58
Titel: TStrings.Assign gibt EAbstractError
Hallo,
ich möchte aus einer Library (CPort) eine bestimmte Procedure nutzen, erhalte aber immer den Fehler "EAbstractError". Da ich den Quellcode der Library habe, konnte ich den Fehler auch in dem dargestellten Code-Schnippsel reproduzieren. Der Fehler passiert bei dem Assign. Ich habe schon versucht, hsl als globale Variable zu deklarieren, hsl als TStrimgs zu definieren oder auch hs als VAR zu übergeben. Hat alles keinen Einfluss. Hat jemand einen Tipp?
Gruß GuaAcke
(Delphi 7)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
|
PROCEDURE TForm1.Button1Click(Sender: TObject); VAR hs: tstrings; i: integer; BEGIN hs := tstrings.Create; fuelle(hs); Memo1.Clear; FOR i := 0 TO hs.Count - 1 DO Memo1.Lines.Add(hs[i]); hs.Free; END;
PROCEDURE TForm1.fuelle(hs: tstrings); VAR hsl: TStringList; BEGIN hsl := TStringList.Create; hsl.Add('aaaa'); hsl.Add('cccc'); hsl.Add('bbbb'); hs.Assign(hsl); hsl.Free; END; |
mandras - Mi 18.04.12 00:29
Ich habs mal mit D6 geprüft.
Das Problem liegt anscheinend an folgendem:
Es ist nicht möglich einem tstrings ein tstringlist zu "assignen":
fuelle aus cport ruft das assign der übergebenen tstrings auf. dort wird wiederum clear aufgerufen was den abstract error erzeugt.
Versuch es einfach mal damit in Deinem button1click:
hs := tstringlist.Create;
Narses - Mi 18.04.12 00:50
Moin!
TStrings ist eine abstrakte Basisklasse, die nicht selbst instantiiert werden darf (steht auch so in der DOH :les:), es ist also kein Wunder, dass es so nicht geht:
GuaAck hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
|
PROCEDURE TForm1.Button1Click(Sender: TObject); VAR hs: tstrings; i: integer; BEGIN hs := tstrings.Create; | |
Lösung hast du schon bekommen, z.B. eine
TStringList nehmen. ;)
cu
Narses
GuaAck - Mi 18.04.12 19:41
Danke Narses,
in der Delphi-Hilfe habe ich jetzt folgendes Konstrukt gefunden, was geht:
Delphi-Quelltext
1: 2: 3: 4: 5:
| VAR hs:TStrings;
BEGIN hs:=TstringList.create; |
Damit geht es, Danke an alle,
Narses - Do 19.04.12 09:30
Moin!
GuaAck hat folgendes geschrieben : |
in der Delphi-Hilfe habe ich jetzt folgendes Konstrukt gefunden, was geht:
Delphi-Quelltext 1: 2: 3: 4: 5:
| VAR hs:TStrings;
BEGIN hs:=TstringList.create; | |
"Geht doch" ist ein schlechter Ansatz. :? Ich muss dir davon aber auch abraten, trotz "geht doch". ;) Wenn du eine TStringList instantiierst, dann deklatiere sie auch so, sonst kannst du ja nichtmal ohne Typecast auf die Eigenschaften und Methoden des Objektes zugreifen! :idea: Alles andere macht nur sehr wenig bis keinen Sinn. :nixweiss:
Also:
Delphi-Quelltext
1: 2: 3: 4: 5:
| var hs: TStringList;
begin hs := TStringList.Create; |
cu
Narses
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!