Daten vom Server laden
-
Also ich bin ein voll NooB in Winapi,
mit c++ hab ich aber schon etwas gemacht,
jetzt hab ich die frage, wie ich an eine txt datei die auf einem Server liegt komme (bzw. jpg)Ambesten einfach lokal speichern
wie geht das? mit z.b. http://eastbourne.ea.funpic.de/test.txt
kennt jemand ein tutorial oder könnte jemand einen beispielcode schreiben ..
Ich arbeite mit Dev-c++ deshalb kann ich mfc nicht nutzen...
warte sehnsüchtig auf antworten...
danke schonmal
-
-
Du solltest Dir mal die WInInet-Funktionen anschauen
http://msdn.microsoft.com/library/en-us/wininet/wininet/wininet_functions.asp
und hier speziell:
InternetOpenUrl
http://msdn.microsoft.com/library/en-us/wininet/wininet/internetopenurl.asp
-
also ... ich bin jetzt soweit gekommen
#include <windows.h> #include <wininet.h> int main() { HINTERNET test = InternetOpen("iexplorer", INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0); if(test == NULL) { //error } InternetOpenUrl(test, "http://eastbourne.ea.funpic.de/test.txt", NULL, NULL, INTERNET_FLAG_RELOAD, NULL); }Sorry aber irgendwie blicke ich das msdn net ganz...
das gibt InternetOpenUrl zurück? bzw. wie komme ich jetzt an die txt?
-
InternetReadFile
-
Kleines Beispiel:
http://www.programmershelp.co.uk/showcode.php?e=57
-
So
#include <windows.h> #include <wininet.h> int main() { HINTERNET open = InternetOpen("iexplorer", INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0); if(open == NULL) { //error } HINTERNET Connection = InternetOpenUrl(open, "http://eastbourne.ea.funpic.de/test.txt", NULL, NULL, INTERNET_FLAG_RELOAD, NULL); char lesen[1024]; char* lesen2; InternetReadFile(Connection, lesen2, 1024, NULL); }so... mein Compiler (dev-c++ gibt aber diverse fehler aus)
36 C:\Eigene Dateien\C++\projekte\downltest\main.cpp [Warning] passing NULL used for non-pointer converting 4 of
void* InternetOpenUrlA(void*, const CHAR*, const CHAR*, DWORD, DWORD, DWORD)' 36 C:\\Eigene Dateien\\C++\\projekte\\downltest\\main.cpp [Warning] passing NULL used for non-pointer converting 6 ofvoid* InternetOpenUrlA(void*, const CHAR*, const CHAR*, DWORD, DWORD, DWORD)'
[Linker error] undefined reference toInternetOpenA@20' [Linker error] undefined reference toInternetOpenUrlA@24'
[Linker error] undefined reference to `InternetReadFile@16'
-
Schlechtes Beispiel... sollte besser heissen:
HINTERNET Connection = InternetOpenUrl(open, "http://eastbourne.ea.funpic.de/test.txt", NULL, 0, INTERNET_FLAG_RELOAD, NULL);Und füge noch die "Wininet.lib" als LIB Deinem Projekt hinzu...
Unter VC kannst DU das auch mittels:#pragma comment(lib, "Wininet.lib")machen; weiss aber nicht ob das DevC kann...
-
scheinbar kann ers nicht ... es kommt nämlich immernoch
[Linker error] undefined reference to
InternetOpenA@20' [Linker error] undefined reference toInternetOpenUrlA@24'
[Linker error] undefined reference to `InternetReadFile@16'zurück
-
Wininet.lib hast Du hinzugefügt, dass er gegen diese LIB linken soll?
-
wenn du damit meinst das ich die lib im projekt aufgenommen habe dann ja .. (fehler bleibt)
-
Du solltest Dich an jemand wenden, der sich mit Deiner IDE auskennt...
-
die datei heißt dort ein wenig anders. ich glaube libwininet.a oder so.
-
achso und das mit dem pragma geht meines wissens nicht. du musst die datei über die projektoptionen einbinden.
-
woher nehme ich den jemand der sich mit dev-c++ auskennt
und es gibt die libwinnet.a ... hab sie mal dem Projekt hinzugefügt.. nix passiert
sorry .. aber ic hkriegs echt net gebacken

-
dev-c++ solltest du sowieso meiden. ist eine der schlechtesten ides. nimm codeblocks oder visual c++ 2005 express edition.
-
okay habs mal in codeblocks gemacht...
aber ich habe immernoch ein problem...
er gibt bei dem code
#include <iostream> #include <windows.h> #include <wininet.h> #pragma comment(lib, "libwininet.a") using namespace std; int main() { /* InternetOpenUrl( HINTERNET hInternet, LPCTSTR lpszUrl, LPCTSTR lpszHeaders, DWORD dwHeadersLength, DWORD dwFlags, DWORD_PTR dwContext ); InternetOpen( LPCTSTR lpszAgent, DWORD dwAccessType, LPCTSTR lpszProxyName, LPCTSTR lpszProxyBypass, DWORD dwFlags ); InternetReadFile( HINTERNET hFile, LPVOID lpBuffer, DWORD dwNumberOfBytesToRead, LPDWORD lpdwNumberOfBytesRead );*/ HINTERNET open = InternetOpen("iexplorer", INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0); if(open == NULL) { //error } //HINTERNET Connection = InternetConnect(Initialize,"",INTERNET_DEFAULT_HTTP_PORT, NULL,NULL,INTERNET_SERVICE_HTTP,0,0); HINTERNET Connection = InternetOpenUrl(open, "http://eastbourne.ea.funpic.de/test.txt", NULL, 0, INTERNET_FLAG_RELOAD, 0); char lesen[1024]; char* lesen2; InternetReadFile(Connection, lesen2, 5024, NULL); cout << lesen << endl; }0 aus

-
du solltest auch schon was in das array schreiben lassen...
-
-
macht er das nicht hier
InternetReadFile(Connection, lesen, 1024, NULL);
schreibt er da nicht in lesen?