IP mit MFC-DialogBox anzeigen lassen



  • Erstmal vielen Dank für deine Hilfe, isabeau.

    Ich hab jetzt alles so gemacht, wie du es geschrieben hast, bekomme jetzt aber eine Unmenge von Fehlermeldungen:

    C:\Programme\Microsoft Visual Studio\MyProjects\IPAnzeiger\IPAnzeigerDlg.cpp(175) : error C2065: 'CInternetSession' : undeclared identifier
    C:\Programme\Microsoft Visual Studio\MyProjects\IPAnzeiger\IPAnzeigerDlg.cpp(175) : error C2146: syntax error : missing ';' before identifier 'session'
    C:\Programme\Microsoft Visual Studio\MyProjects\IPAnzeiger\IPAnzeigerDlg.cpp(175) : error C2065: 'session' : undeclared identifier
    C:\Programme\Microsoft Visual Studio\MyProjects\IPAnzeiger\IPAnzeigerDlg.cpp(176) : error C2065: 'CInternetFile' : undeclared identifier
    C:\Programme\Microsoft Visual Studio\MyProjects\IPAnzeiger\IPAnzeigerDlg.cpp(176) : error C2065: 'file' : undeclared identifier
    C:\Programme\Microsoft Visual Studio\MyProjects\IPAnzeiger\IPAnzeigerDlg.cpp(176) : error C2106: '=' : left operand must be l-value
    C:\Programme\Microsoft Visual Studio\MyProjects\IPAnzeiger\IPAnzeigerDlg.cpp(180) : error C2059: syntax error : ')'
    C:\Programme\Microsoft Visual Studio\MyProjects\IPAnzeiger\IPAnzeigerDlg.cpp(182) : error C2061: syntax error : identifier 'CInternetException'
    C:\Programme\Microsoft Visual Studio\MyProjects\IPAnzeiger\IPAnzeigerDlg.cpp(182) : error C2310: catch handlers must specify one type
    C:\Programme\Microsoft Visual Studio\MyProjects\IPAnzeiger\IPAnzeigerDlg.cpp(185) : error C2065: 'm_pException' : undeclared identifier
    C:\Programme\Microsoft Visual Studio\MyProjects\IPAnzeiger\IPAnzeigerDlg.cpp(185) : error C2227: left of '->Delete' must point to class/struct/union
    C:\Programme\Microsoft Visual Studio\MyProjects\IPAnzeiger\IPAnzeigerDlg.cpp(188) : error C2317: 'try' block starting on line '179' has no catch handlers
    C:\Programme\Microsoft Visual Studio\MyProjects\IPAnzeiger\IPAnzeigerDlg.cpp(190) : error C2227: left of '->ReadString' must point to class/struct/union
    C:\Programme\Microsoft Visual Studio\MyProjects\IPAnzeiger\IPAnzeigerDlg.cpp(190) : fatal error C1903: unable to recover from previous error(s); stopping compilation

    Die IP-Adresse wollte ich mir von der Seite http://checkip.dyndns.org/ ziehen. Die zeigt nur meine momentane IP an, sonst nichts, deswegen würde sich dass extrahieren aus dem HTML-Code anbieten, dachte ich. Ich wollte die IP dann eigentlich mit dem Controlbutton "IP Adress" wiedergeben. Kann man doch so machen, oder?



  • Versuch mal
    #include <afxinet.h>
    an den Anfang von CIPAnzeigerDlg.cpp zu schreiben (wenn da schon irgendwelche include-Anweisungen stehen, dann darunter).



  • Das hat geklappt. Vielen, vielen Dank. Jetzt muss ich nur noch schauen, wie ich die am besten wiedergebe. (Also Button, oder IP Adress Controll-Button oder so)

    Kannst du mir bitte nochmal schreiben, für was die afxinet-Bibliothek so zuständig ist?



  • Hmm, sorry, aber ich bekomme das nicht so richtig hin. Ich habe jetzt einen Controll-Button "IP Adress" und versuche nun den HTML-Code (der wie gesagt nur aus der IP-Adresse besteht) damit wiederzugeben.

    getHtmlSource("http://checkip.dyndns.org/");
    return HtmlSource;
    

    So klappt's leider nicht.

    Noch ne Idee?

    (Ich glaube ich werde für deine umfassende Hilfe das Programm, wenn's denn mal fertig wird, auf deinen Namen taufen:) )



  • Zu afxinet-Bibliothek:
    ich habe nicht die blasseste Ahnung, was das für ein Teil ist. Ich habe nur 'CInternetSession' aus deinem Text kopiert und in die MSDN-Suche eingefügt. Dort steht, dass CInternetSession #include <afxinet.h> benötigt. Mehr nicht.

    Und getHtmlSource(CString url) hat einen Rückgabewert vom Typ CString. Schreib mal das in die Funktion von deinem Button:
    CString strHTMLText = "";
    strHTMLText = getHtmlSource("http://checkip.dyndns.org/");
    AfxMessageBox(strHTMLText);
    Dann sollte eine MessageBox erscheinen, die dir das anzeigt, was getHtmlSource "erzeugt".



  • Super, vielen Dank. Klappt jetzt erstmal.

    Leider hattest du schon recht, wenn man jetzt den Button drückt erhält man eine Messagebox mit:

    "<html><head><title>Current IP Check</title></head><body>Current IP Address: 217.135.11.101</body></html>".

    Das will ich aber wenn möglich vermeiden. Kennst du eine Funktion, die mir nur die Zahlen ausgibt? Oder kann man vielleicht mit dem Control "IP Adress" arbeiten?



  • Noch was:

    Was bedeutet denn in deinem Code:

    CString strHTMLText = ""; 
    strHTMLText = getHtmlSource("http://checkip.dyndns.org/"); 
    AfxMessageBox(strHTMLText);
    

    Das Afx vor Messagebox? Hab ich noc nie gelesen. Was hat das denn für eine Funktion?



  • Die normale MessageBox macht manchmal Probleme und braucht so viele Parameter... Ich nehme immer die AfxMessageBox, aber wo die jetzt genau herkommt... ?!?

    Probier mal:

    CString strHTMLText = ""; 
    strHTMLText = getHtmlSource("http://checkip.dyndns.org/"); 
    AfxMessageBox(strHTMLText);
    int i = strHTMLText.Find("Address:");
    int n = strHTMLText.Find("<", i);
    strHTMLText = strHTMLText.Mid(i+10, n-i);
    AfxMessageBox(strHTMLText);
    

    Ist nicht so schön, könnte aber klappen. Evtl. müssen die Zahlen noch um ein paar Werte nach oben oder unten verschoben werden, damit sie genau den gewünschten Substring ausschneiden, habe ich jetzt nicht ausprobiert.

    [edit] ...jaja, sieht mit Code-Tags besser aus... 😃 [/edit]



  • Ihr seit mir ja Helden...
    Man sollte das auch ohne Inetseite schaffen 😉

    http://c-plusplus.net/forum/viewtopic.php?t=77199&highlight=ip

    Devil



  • *g* das kann ja jeder 😃
    [rausreden]...öhm,... Bedingung des Fragenden war das Ermitteln der IP über die angegebene URL (siehe 2. Posting) [/rausreden]



  • Hmm, jetzt zeigt er mir aber 2 MessageBoxes. Eine mit dem kompletten HTML-Code die zweite dann mit dem definiertem Fragment....



  • Unschön ist es eigentlich auch. Wo könnte ich denn nachlesen, wie ich sowas mit dem "IP Adress" Button mache. Oder hat vielleicht jmd. einen ausführlichen Tipp *hüstel*

    Danke schonmal im Voraus



  • Zu den MessageBoxen:
    das war ja nur, um die jeweiligen Inhalte anzuzeigen. Die 1. MessageBox kannst du weglöschen. Und bei der 2. hast du jetzt eine Möglichkeit, wie du an die IP kommst. Den String kannst du jetzt z.B. nach Punkten unterteilen (mit Find() und Mid(...) wie bereits gemacht), in Zahlen umwandeln (mit atoi(..)) und in ein IP-Kontrol schreiben oder als String belassen und in ein Editfeld schreiben oder in der MessageBox lassen oder...

    Zu deinem IP-Ctrl:
    - Strg-Taste gedrückt halten und im Resourcen-Editor auf das IP-Control klicken -> eine Membervariable der Kategorie Control erstellen (z.B. m_IP)
    - im Code:
    m_IP.SetAddress(168,108,108,106);
    ...und schon steht das drin. Wenn du da andere Zahlen haben willst: siehe fettgedrucktes oben.

    ..und ja, es ist unschön über die Web-Site zu gehen



  • Das werd ich mal heute abend ausprobieren vielen Dank jedenfalls.

    Ich hab gemerkt, dass 2 Messageboxes kamen, weil der String plötzlich zu lange war. Ich hab noch nicht ganz verstanden, wie ich den kompletten String den abschneiden und nur ein bestimmtes Fragment anzeigen lassen kann??

    Nochmals vielen Dank



  • isabeau schrieb:

    Und bei der 2. hast du jetzt eine Möglichkeit, wie du an die IP kommst. Den String kannst du jetzt z.B. nach Punkten unterteilen (mit Find() und Mid(...) wie bereits gemacht), in Zahlen umwandeln (mit atoi(..)) und in ein IP-Kontrol schreiben oder als String belassen und in ein Editfeld schreiben oder in der MessageBox lassen oder...

    Also, ich weiß nicht genau, wie das mit Find(), MID() bzw. atoi funktioniert???



  • Wenn es dich interessiert, wie es geht:
    - hier nach oben scrollen [edit](OK, in diesem Fall entfält das scrollen) 😃 [/edit]
    - oben rechts auf [suchen] klicken
    - in dem obern Feld einen von den Begriffen eintragen
    - bei Forum "MFC mit dem Visual C++" oder "FAQ - MFC" einstellen
    - unten in der Mitte "Suchen" anklicken
    -> Beiträge lesen
    War schon tausend mal hier und wäre zu lang, um es jetzt noch mal zu erzählen.
    Jetzt ist nämlich WOCHENENDE.
    Bin weg...



  • Werd jetzt auch mal gehen. Ich werd euch (dich) frühestens wieder übernächste Woche mit Fragen bombardieren. Vielen Dank jedenfalls für den "informativen" Tag:)


Anmelden zum Antworten