Problem mit Indy oder Struktur?



  • Hallo miteinander

    Ich habe eine eigene Klasse Namens(CFtp) eingebaut, die sowohl FTP-Sachen mit Indy macht, als auch Strings von remote-files verarbeiten soll.

    Der Konstruktor dafür ind der Datei CFtp.h

    CFtp(TForm* Owner);
    

    und in der CFtp.cpp

    CFtp::CFtp(TForm* Owner)
    {
        TIdFTP *Mftp = new TIdFTP(0);
        formular = Owner;
    }
    

    In der CFtp liegt eine Struktur

    struct tagVerbindung
        {
            int Port;
            AnsiString User;
            AnsiString Password;
            AnsiString Host;
            AnsiString Path;
            AnsiString ReceiveDir;
        };
    
        tagVerbindung *Verbindung;
    

    Über mein Hauptformular "Form1" in der Datei Unit1.h
    deklariere ich ein Objekt auf diese Klasse

    CFtp *ftp;
    

    und in der Unit1.cpp

    ftp = new CFtp(this);
        //ftp->Verbindung->Port       = 11;
        ftp->Verbindung->User         = "username";
        ftp->Verbindung->Password     = "passwort";
        //ftp->Verbindung->Host       = "111.111.111.111";
        //ftp->Verbindung->Path       = "html/irgendeinpfad";
        /*Ordner zum download auf meinem Rechner*/
        //ftp->Verbindung->ReceiveDir   = "receive";
    

    Soweit funktioniert das auch.
    Komisch wird es wenn ich im letzten Code die Zeile den Kommenter entkommentiere

    ftp->Verbindung->Port       = 11;
    

    Fehlermeldung:(als Message)
    Im Projekt Project1.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 00000000. Lesen von Adresse 00000000'. Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.

    Noch komischer, wenn ich das sein lasse und die andere Zeile entkommentiere

    /*Ordner zum download auf meinem Rechner*/ 
        ftp->Verbindung->ReceiveDir   = "receive";
    

    Da passiert zunächst nichts, aber beim Schließen des Formulars
    Fehlermeldung:(als Message)
    Zugriffsverletzung bei Adresse 0042009E in Modul 'Project1.exe'. Lesen von Adresse 00657669.

    Ich muss noch dazu sagen, das zunächst keine Verbindungen und so weiter stattfinden.
    Der Fehler muss also an der Struktur an sich liegen. Finde ich aber nicht.

    Hilfe



  • tagVerbindung *Verbindung;
    ist ein Zeiger -> hat der auch irgendwo Speicherplatz bekommen?

    Wozu hat die Klasse überhaupt TForm* Owner ?

    Wozu innerhalb dieser "einfachen" Klasse noch eine Struktur? Warum sind die Variablen nicht einfach Member der Klasse?

    //ftp->Verbindung->Port = 11;

    Sofern du mit anderen FTP-Servern arbeiten willst = 21 (20)



  • Jetzt klappts
    statt tagVerbindung *Verbindung;
    tagVerbindung Verbindung;

    Danke



  • Für dich und deine Klasse vielleicht noch ein interessanter Artikel aus der FAQ:
    http://www.c-plusplus.net/forum/viewtopic.php?t=39302


Anmelden zum Antworten