Fehler bei InternetReadFile



  • Hallo!

    Ich habe versucht zum leidigen Thema "Datei aus Internet laden" ein Programm zu schreiben. Dabei ist folgender Code entstanden:

    HINTERNET hInternet = InternetOpen("Test", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    					if(hInternet == NULL) 
    					{
    					MessageBox(NULL, "Error on Connect", "Could not open WinINET", MB_OK);
    					break;
    					}
    					LPDWORD dwNumber;
    					char cVersion[MAX_PATH];
    					HINTERNET hFile = InternetOpenUrl(hInternet, "http://www.xyz.de/datei.txt", NULL, 0, 0, 0);
    					if(!InternetReadFile(hFile, cVersion, sizeof(cVersion), dwNumber)) MessageBox(NULL, "ReadFile", "Error", 0);
    					MessageBox(NULL, cVersion, "", 0);
    					InternetCloseHandle(hFile);
    					InternetCloseHandle(hInternet);
    

    Der Inhalt der Datei wird mir noch richtig angezeigt, allerdings bricht das Programm mnit folgender Debug-Meldung danach ab:

    Run-Time Check Failure #3 - The Variable dwNumber is being used without being defined.

    Wenn ich nun die Zeile

    LPDWORD dwNumber;
    

    in

    LPDWORD dwNumber = 0;
    

    ändere liefert mir die Funktion InternetReadFile einen Fehler zurück...

    Wíe kann ich den Fehler beheben?

    Danke!

    MfG Pendragon



  • hat sich erledigt... ^^

    DWORD dwNumber = 0;
    

    und bei InternetReadFile

    InternetReadFile(..., &dwNumber);
    

    Hätte meinen Beitrag auch gelöscht, aber geht das hier überhaupt?

    MfG



  • Es ist gut, dass beide Beiträge noch vorhanden sind. Sie sind informativ.
    Interessant



  • Diese Funktionen zu benutzen ist die schlechteste mir bekannte Methode Dateien aus dem Internet zu laden. Sie erfordern nämlich bestimmte DLLs, die nicht auf jeder Windowsplattform vorhanden sind, bei manchen Windows Versionen doch vorhanden sind weil Internet Explorer oder manche Versionen von Office installiert sind UND falls sie vorhanden sind von den sicherheitseinstellungen von Windows abhängig sind.

    Außerdem besteht leider keine Möglichkeit die Übertragung dieser Funktionen zu überwachen. Du bekommst entweder nen fehler oder die ganze Datei. Bytes zählen wird unmöglich.

    Für winzige Projekte mir aus.. und für größere oder wichtige Software sockets nutzen.

    MfG.



  • Sollte schon ab Windows 95 funktionieren.



  • Außerdem besteht leider keine Möglichkeit die Übertragung dieser Funktionen zu überwachen. Du bekommst entweder nen fehler oder die ganze Datei. Bytes zählen wird unmöglich.

    Und warum hat InternetReadFile dann überhaupt den lpdwNumberOfBytesRead Parameter?



  • Tolga schrieb:

    Für winzige Projekte mir aus.. und für größere oder wichtige Software sockets nutzen.

    Ich weiß, es passt nicht 100pro zum Thema: Aber wie macht man das denn mit Sockets? Etwas Erfahrung mit Sockets habe ich schon, aber wenn ich jetzt ne Verbindung zu irgendeinem Webserver auf Port 80 erstelle, passiert nichts, wenn ich mit recv() auf Daten warte. Also ich bekomme nichts automatisch gesendet (haette mich auch gewundert). Muss ich dem Server vielleicht etwas senden, damit er mir die Daten schickt? Oder wie kann man das mit Sockets erledigen? Forensuche hat uebrigens nichts gebracht.



  • Da brauchst du das HTTP-Protokoll. Ist nicht ganz trivial.
    Server und Client tauschen ein paar Daten aus, bevor der Server die Daten sendet.





  • Okay, danke. Ich mache das jetzt mit

    send(s,"GET http://the_url.net/",strlen("GET http://the_url.net/"),0);
    

    Dann werden mir die HTMl-Dateien ja schon gesendet und ich kann sie mit recv() empfangen. Ist ja gar nicht so schwer wie ich gedacht habe.



  • byteanzahl zählen geht auch mit den WinInet-Funktionen. Zum einen können die asyncronen Funktionen verwendet werden. Zum anderen kann man auch die Datei häppchenweise anfordern (tut recv ja auch) und eine Fortschrittsanzeige o.ä. in einem zweiten Thread realisieren.


Anmelden zum Antworten