IdHTTP Objekt erstellen aber wie??



  • Aha, wo finde ich denn Raus was da rein muss??
    Hab jetzt mal folgendes eingegeben:

    TIdHTTP *IdHTTP1 = new TIdHTTP(

    wenn man das macht also die Klammer am Schluss auf macht,
    dann kommt ja immer so ein kleiner Hilfetext an der Stelle, da steht dann:

    TComponent * AOwner
    const TIdHTTP &

    Vielleicht hilft das ja?

    MFG

    Maruu



  • Gewöhnt euch bloss ab (bzw. gar nicht erst an), bei der Instantiierung von VCL-Klassen aus Bequemlichkeit die "Konstruktor-Klammern" wegzulassen, nur weil einige Klassen mit parameterlosem Konstruktor das erlauben.

    Bei TIdHTTP IdHTTP1 = new TIdHTTP()**;* setzt der Compiler bei obiger Fehlermeldung den Cursor nämlich genau zwischen die Klammern und teilt dir so explizit mit, wo der Hund begraben liegt. Dann einmal Shift+Strg+Space gedrückt und du siehst sofort, was da fehlt (bei aktiviertem CodeInsight).



  • Ok das hab ich jetzt gemacht mit den Klammern, nach Shift+strg+Space kommt wie oben beschrieben der folgende Dialog:

    TComponent * AOwner
    const TIdHTTP &

    Und wenn ich mit den Klammern aber ohne Inhalt kompilieren will (also so TIdHTTP *IdHTTP1 = new TIdHTTP(); )kommt folgendes:

    [C++ Fehler] Source.cpp(24): E2285 Keine Übereinstimmung für 'TIdHTTP::TIdHTTP()' gefunden
    [C++ Fehler] Source.cpp(26): E2316 'IdHTTP1' ist kein Element von 'TIdHTTP'

    Naja ich werd da auch nicht schlauer draus da ich noch ned lange C++ Programmiere. Wisst ihr mehr??

    MFG

    Maruu



  • Versuchs doch einfach mal mit this. Sonst halt in der Hilfe schauen.

    Übrigens: da ist doch ein Unterschied zwischen NMHTTP und TIdHTTP?



  • Ahhh es werde Licht, jo jetzt hats funktioniert, ich hatte es schon mit TForm1 probiert da gings aber nicht komisch. Naja und NMHTTP und IdHTTP war nur ne Verwechslung, da ich mal mit beiden rumexperimentiert hatte.

    MFG

    Maruu

    PS: this steht doch für die aktuelle Form wo der User gerade drauf ist oder wie
    darf ich mir das vorstellen????



  • Zu this lies dir mal folgendes durch 🙂

    http://tutorial.schornboeck.net/this.htm



  • Ahh danke, naja den sinn versteh ich dann noch ned ganz wieso ich dem dann sich selbst mit übergeb aber naja was solls.
    Ich hätte noch ne Frage zu Exceptions, die IdHTTP Komponente löst manchmal welche aus die ich abfangen möchte, hab das jetzt so gemacht:

    try{
    Memo1->Text=IdHTTP1->Get(Edit5->Text+"?SQLString="+Edit2->Text);
    }
    catch(...){
    MessageBox ( NULL, "Dohh", "Error", MB_OK );
    }

    So nun ist das Problem das das Programm trotzdem abschmiert obwohl ich das
    Abfangen mit try und catch gemacht hab. Und das Programm schmiert genau in
    der
    Zeile mit dem Meomo1->... ab. Was mach ich falsch? Muss ich noch irgendwo was aktivieren??

    MFG

    Maruu



  • Siehe den Beitrag zum Exception-Handling in der FAQ (unter "Drucker").

    Und in Zukunft bitte die Faustregel beachten: ein Thema pro Thread, ein Thread pro Thema. Danke!



  • Ähm jetzt bin ich doch nochmal da zum thema TIdHTTP, also solange ich das
    in der normalen Cpp Unit zu meinem Formular mache geht die Zeile:

    TIdHTTP *IdHTTP = new TIdHTTP(this);

    mit "this" ohne probleme, so nun hab ich die Zeile aber in eine eigene Klasse von mir, die in einer Extra .cpp Datei mit Header datei is eingebunden und dann
    zeigt this ja auf mein Objekt und genau an dieser Stelle meckert der Compiler oder Debugger was auch immer mit folgender Meldung:

    E2285 Keine Übereinstimmung für 'TIdHTTP::TIdHTTP(GetHtmlSource * const)' gefunden

    meine Klasse heisst GetHtmlSource .
    Naja ich peil jetzt leider nicht was ich der Klasse bzw. dem Objekt dann mit übergeben muss, gibts was damit es generell funktioniert???

    MFG

    Maruu



  • Du musst ihr als Paramter deine Form übergeben. Darauf hättest du aber auch selber kommen können 😉

    In etwa so

    TIdHTTP *IdHTTP = new TIdHTTP(Form1)
    


  • Wie du weiter oben selbst herausgefunden hast wird als Owner-Parameter TComponent oder TIdHTTP erwartet.

    Bei Verwendung im Kontext einer Form bezieht sich this auf die Form, und die ist ja von TComponent abgeleitet. Bei Verwendung in einer eigenen Klasse bezieht sich this eben auf diese (bzw. eine Instanz davon), und deine Klasse ist offensichtlich weder von TComponent noch von TIdHTTP abgeleitet.

    Üblicherweise übergibt man in solchen Fällen einfach NULL, ist damit aber definitiv selbst für das spätere Freigeben per delete verantwortlich. Das würde sonst nämlich notfalls der Owner bei seiner eigenen Zerstörung übernehmen.



  • Hi!

    Hab jetzt erst mal die Lösung mit der Form Probiert udn es geht, so dann hab ich NULL übergeben und das geht auch. Mhhm werd wohl Null nehmen da das delete kein Problem darstellt da das Objekt nicht lange gültig ist und in der gleichen Methode wieder deletet wird. Danke für eure Hilfe.

    MFG

    Maruu


Anmelden zum Antworten