TStrings->LoadFromFile geht nicht richtig!



  • Hallo zusammen,

    ich möchste ein TString-Objekt erzeugen; Dies habe ich so gelöst:

    TStrings *string;
    
    string->LoadFromFile("E:\\test.html");
    

    Doch leider spuckt der Compiler mir eine EAccessViolation aus!
    Kann mir einer helfen, dass das geht?!

    Vielen Dank!

    Gruß



  • Nimm TStringList anstatt TStrings. Ach ja, du solltest vielleicht auch noch per "new" Speicher für das Objekt allokieren...



  • WebFritzi schrieb:

    Ach ja, du solltest vielleicht auch noch per "new" Speicher für das Objekt allokieren...

    lol das hätte ich mal als erstes geschrieben 😉



  • skluge schrieb:

    ich möchste ein TString-Objekt erzeugen; Dies habe ich so gelöst:

    TStrings *string;
    

    So erzeugst Du aber nur eine Zeiger auf TStrings. Ein Objekt muß dann auch mit new erzeugt werden. Geht mit TStrings allerdings nicht, weil es eine abstrakte Klasse ist.

    [Edit:] Da hab ich wohl ein bißchen langsam getippt....



  • Hallo

    und noch der Hinweis, das mit new angelegte Instanzen auch manuell mit delete wieder gelöscht werden müßen (Ausnahmen bestätigen die Regel).

    bis bald
    akari



  • Sorry für die späte Antwort!

    hier mal mein Quellcode:

    TStrings *string = new TStrings();
    
       m_pMessage->MessageParts->Add();
       TIdText *IdText1 = new TIdText(m_pMessage->MessageParts,string->Lines);
       IdText1->ContentType="text/plain";
    
       TIdText *IdText2 = new TIdText(m_pMessage->MessageParts,string->Lines);
       IdText2->ContentType="text/html"
    

    Wenn ich jetzt den Compiler laufen lasse, dann spuckt er mir folgenden Fehler aus:

    [C++ Fehler] Unit1.cpp(115): E2352 Instanz der abstrakten Klasse 'TStrings' kann nicht erzeugt werden
    [C++ Fehler] Unit1.cpp(115): E2353 Klasse 'TStrings' ist abstrakt, weil '_fastcall TStrings::Get(int) = 0'

    ich möchte in die Variable "string" HTML-Code packen! Leider nimmt die TIdText-Komponente nur TStrings als Wert, oder?!

    Wie kann ich das denn lösen?

    Danke für die Antworten



  • WebFritzi schrieb:

    Nimm TStringList anstatt TStrings. Ach ja, du solltest vielleicht auch noch per "new" Speicher für das Objekt allokieren...



  • C++ Builder 6 Hilfe schrieb:

    Von TStrings abgeleitete Objekte ermöglichen die Speicherung und Bearbeitung von String-Listen. TStrings enthalten virtuelle Methoden und sollten nicht direkt instantiiert werden



  • Wenn ich eine StringListe nehmen soll, wie kann ich die dann aber auf die Methode:

    TIdText *IdText1 = new TIdText(m_pMessage->MessageParts, ??????? );
    

    anwenden? Hier wird doch TStrings erwartet?



  • Hallo

    du solltest dir unbedingt Grundlagen in OOP beibringen.

    Denn dann wüßtest du, das da TStringList von TStrings abgeleitet ist, eine Instanz von TStringList auch als TStrings angesprochen werden kann. Das heißt du kannst dort ganz normal eine TStringList übergeben.

    bis bald
    akari



  • evtl. mit StringList->Strings?



  • Hallo

    @ SilentSurfer :
    Schau dir doch in der BCB-Hilfe mal an, was TStringList::Strings als Typ zurückgibt.
    Oder probier es in einem Beispielprojekt bei dir aus.

    bis bald
    akari



  • @akari:
    hast recht, AnsiString als Rückgabe ist nicht geeignet.
    War ein Schnellschuss aus der Hüfte.


Anmelden zum Antworten