Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi gelöst ... Klasse rekursiv nutzen? (https://www.delphipraxis.net/150755-geloest-klasse-rekursiv-nutzen.html)

moelski 26. Apr 2010 09:02


gelöst ... Klasse rekursiv nutzen?
 
Moin !

Kann ich eine Klasse nicht rekursiv nutzen?
Folgendes Konstrukt:
Delphi-Quellcode:
   TMailDecode = Class
      Private
        FContentType         : String;    
        FBoundary            : String;      // MIME Boundary

        FMultiPart           : TMailDecode;

        function GetContentType              (Line : string) : string;
        function GetContentDisposition       (Line : string) : string;
        function GetContentDispositionFileName(Line : string) : string;

      Protected
...
Compilieren kann ich das, aber wenn ich dann FMultiPart erzeugen will, dann knallt es im Create.
Gibts da einen Trick?

Ich müsste nämlich einen Mailbody zerlegen und da käme mir das sehr gelegen mit der rekursiven bzw. verschachtelten Klasse.

Alaitoc 26. Apr 2010 09:06

Re: Klasse rekursiv nutzen?
 
Kannst du vll. mal deinen Create-Aufruf und den Constructor zeigen?
So direkt fällt mir da nichts auf was falsch ist...

MfG Alaitoc

Deep-Sea 26. Apr 2010 09:07

Re: Klasse rekursiv nutzen?
 
Zitat:

Zitat von moelski
Compilieren kann ich das, aber wenn ich dann FMultiPart erzeugen will, dann knallt es im Create.
Gibts da einen Trick?

Falls du FMultiPart bedingungslos im Create erzeugst, ist klar das es "knallt". Denn das endet logischerweise in einer Endlosschleife.

moelski 26. Apr 2010 09:12

Re: Klasse rekursiv nutzen?
 
Moin !

Das ist mein Create:
Delphi-Quellcode:
constructor TMailDecode.Create(MIMEBoundary: string; ContentType : string; TextReceived: string);
var
  I: Integer;
begin
  inherited Create;
  FContentType := ContentType;
  FBoundary    := MIMEBoundary;
  FTextReceived := TextReceived;

  FTextList := TStringList.Create;

  // Text in Stringliste eintragen
  FTextList.Delimiter      := chr(10);
  FTextList.StrictDelimiter := True;
  FTextList.DelimitedText  := FTextReceived;

  FSession := TSiSession.Create(Si, 'MailDecode');
  FSession.ClearAll;
  FSession.EnterMethod('Mail Decoding ...');

  // Debug Only
//  for I := 0 to FTextList.Count - 1 do
//    FSession.LogVerbose(IntToStr(I) + ' ' + FTextList[I]);
  FSession.LogVerbose('FBoundary : ' + FBoundary);
end;
Das FMultiPart erzeuge ich nur dann wenn ich es auch brauche.

Knallen tuts schon hier:
FContentType := ContentType;

himitsu 26. Apr 2010 09:17

Re: Klasse rekursiv nutzen?
 
Und was heißt "knallen"?


Zitat:

Zitat von moelski
Knallen tuts schon hier:
FContentType := ContentType;

Das Einzige, welches dort knallen könnte wäre
- das Objekt ist nicht erzeugt (aber da hätte es schon vorher "geknallt")
- der String in ContentType ist defekt (da müßtest du vorher irgendwo dessen Speicherverwaltung zerschießen).

Deep-Sea 26. Apr 2010 09:18

Re: Klasse rekursiv nutzen?
 
Zitat:

Zitat von moelski
Knallen tuts schon hier:
FContentType := ContentType;

Vlt. doch eher schon im inherited Create? Delphi zeigt ja gerne mal die falsche Zeile an. Weil eine einfache String-Zuweisung sollte immer gehen. Was kommt denn eig. für ein Fehler?

HeZa 26. Apr 2010 09:18

Re: Klasse rekursiv nutzen?
 
Hallo,

Zitat:

Zitat von moelski
Das FMultiPart erzeuge ich nur dann wenn ich es auch brauche.

Knallen tuts schon hier:
FContentType := ContentType;

Es könnte hilfreich sein, wenn du Mal genauer beschreibst, was Du unter "Knallen" verstehst. Gibt es da ein Meldung? Wenn ja, welche?

moelski 26. Apr 2010 09:20

Re: Klasse rekursiv nutzen?
 
Knallen heisst in dem Fall:
Erste Gelegenheit für Exception bei $7C812AFB. Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 004069BA in Modul 'XYZ.exe'. Schreiben von Adresse 00000004'. Prozess XYZ.exe (256)

Auch Eurekalog sagt mir die Zeile mit der Stringzuweisung. :gruebel:

moelski 26. Apr 2010 09:22

Re: Klasse rekursiv nutzen?
 
ENTSCHULDIGUNG ...

vergesst bitte die ganze Anfrage.
Man sollte die Instanz einer Klasse auch richtig erzeugen mittels:
Delphi-Quellcode:
          MultiPart := TMailDecode.Create(FMultiPartBoundary,
                            'multipart/alternative',
                            FMailPart[Boundary].TextList.Text);
und nicht

Delphi-Quellcode:
          MultiPart.Create(FMultiPartBoundary,
                            'multipart/alternative',
                            FMailPart[Boundary].TextList.Text);
Schande. Muss noch nen Kaffee trinken.

Sorry für die Umstände.

jfheins 26. Apr 2010 09:22

Re: Klasse rekursiv nutzen?
 
Wie erzeugst du die Klasse?


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:04 Uhr.
Seite 1 von 2  1 2      

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