wulfgang Geschrieben 22. Januar 2009 Autor Teilen Geschrieben 22. Januar 2009 Hallo, funktioniert leider immer noch nicht. Bekomme immer noch die gleiche Fehlermeldung. Der von mir verwendete Proxy hat auch noch ein Passwort und einen Benutzer. Wo soll ich die denn eintragen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 22. Januar 2009 Teilen Geschrieben 22. Januar 2009 Schau dir mal CInternetSession::SetOption an, und dort die Flags INTERNET_OPTION_PROXY_PASSWORD und INTERNET_OPTION_PROXY_USERNAME. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 22. Januar 2009 Autor Teilen Geschrieben 22. Januar 2009 Hallo, also ich habe dort INTERNET_OPTION_PROXY_PASSWORD und INTERNET_OPTION_PROXY_USERNAME gefunden. Da ist leider kein Beispiel. Ich würde das irgendwie so machen: SetOption->session( INTERNET_OPTION_PROXY_PASSWORD::"meinPasswort" INTERNET_OPTION_PROXY_USERNAME::"meinUser", DWORD dwValue, DWORD dwFlags = 0 ); Was muss noch verbessern? Mit der Beschreibung zum dwValue kann ich noch nicht so viel anfangen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 22. Januar 2009 Teilen Geschrieben 22. Januar 2009 Ist dir der Unterschied zwischen einer Funktionsdeklaration und einem Funktionsaufruf klar? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 22. Januar 2009 Autor Teilen Geschrieben 22. Januar 2009 (bearbeitet) Ja eigentlich schon. Bei einer Funktionsdeklaration werden die Parameter und Datentypen festgelegt. Bei einem Funktionsaufruf werden Parameter übergeben. Ist doch so richtig? Jetzt müsste das einem Funktionsaufruf näher kommen. SetOption->session( INTERNET_OPTION_PROXY_PASSWORD::"meinPasswort" INTERNET_OPTION_PROXY_USERNAME::"meinUser", dwValue, dwFlags = 0 ); Bearbeitet 22. Januar 2009 von wulfgang Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 22. Januar 2009 Autor Teilen Geschrieben 22. Januar 2009 Hey, kann mir jemand Bitte noch mal helfen? In der der Hilfe steht echt nichts womit ich viel anfangen könnte. Ich weiß nicht wie ich die Flags eintragen soll und auch nicht was für dwValue und dwFlags = 0 stehen soll. Wäre wirklich über jede Hilfe dankbar. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 23. Januar 2009 Autor Teilen Geschrieben 23. Januar 2009 Guten Morgen, habe noch mal gesucht und probiert. Das ist herrausgekommen: session.SetOption(INTERNET_OPTION_PROXY_PASSWORD ,(DWORD)"meinpasswort"); session.SetOption(INTERNET_OPTION_PROXY_USERNAME ,(DWORD)"meinuser"); Der Compiler meckert nicht mehr. Bei Ausführung des Programms erhalte ich aber immer noch die Fehlermeldung:"Der Servername oder die Serveradresse konnten nicht verarbeitet werden." Ich erhalte noch die Warnung: "warning C4002: too many actual parameters for macro '_T' " Diese Warnung betrifft die Zeile: CInternetSession session(_T("My FTP Session",1, INTERNET_OPEN_TYPE_PROXY , "beispielproxy-ge", NULL, 0)); Kann diese Zeile Ursache für mein Problem sein? Grüße Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 23. Januar 2009 Teilen Geschrieben 23. Januar 2009 Der Compiler meckert nicht mehr. Ja, weil du es ihm quasi verboten hast. Der Cast auf DWORD sagt dem Compiler, dass er das so akzeptieren muss. Ich gehe ganz stark davon aus, dass du für String-Options die andere Version von SetOption benutzen musst. Als allererste Maßnahme wäre es gut, den Rückgabewert von SetOption zu prüfen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 23. Januar 2009 Autor Teilen Geschrieben 23. Januar 2009 Hallo, okay der Rückgabewert 0 von SetOption sagt mir, dass die Operation fehlgeschlagen ist. Welche andere SetOption? In der Hilfe stehen ja zwei überladende. Ich weiß aber nicht wie ich die andere SetOption schreibe. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 23. Januar 2009 Teilen Geschrieben 23. Januar 2009 Ich vermute, so: session.SetOption( INTERNET_OPTION_PROXY_PASSWORD, _T("meinpasswort"), _tcslen(_T("meinpasswort")) );[/code] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 23. Januar 2009 Teilen Geschrieben 23. Januar 2009 Als allererste Maßnahme wäre es gut, den Rückgabewert von SetOption zu prüfen. Also ich würde sagen als allererste Maßnahme wäre es gut überhaupt einmal die Grundlagen der Sprache zu lernen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 23. Januar 2009 Autor Teilen Geschrieben 23. Januar 2009 Moin, also ich habe jetzt geschrieben: bool abc = false; abc = session.SetOption( INTERNET_OPTION_PROXY_PASSWORD, _T("jutta41"), _tcslen(_T("jutta41")) ); cout << abc << "\n"; session.SetOption( INTERNET_OPTION_PROXY_USERNAME , _T("TSK957"), _tcslen(_T("TSK957")) ); Leider bekomme ich als Rückgabe weiterhin eine 0. Außerdem bekomme ich folgende Warnungen:warning C4267: 'argument' : conversion from 'size_t' to 'DWORD', possible loss of data und warning C4800: 'BOOL' : forcing value to bool 'true' or 'false' (performance warning) Hast du noch eine Idee? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 23. Januar 2009 Teilen Geschrieben 23. Januar 2009 Was gibt denn GetLastError zurück? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 23. Januar 2009 Autor Teilen Geschrieben 23. Januar 2009 GetLastError sagt:Fehler 12018 In der Documentation steht: ERROR_INTERNET_INCORRECT_HANDLE_TYPE 12018 The type of handle supplied is incorrect for this operation Dann stimmt da was mit den Datentypen wohl noch nicht? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 23. Januar 2009 Autor Teilen Geschrieben 23. Januar 2009 Also ich versuche jetzt erst mal eine normale Ftp-Verbindung herzustellen-ohne Proxy. Damit ich das erst mal hinbekomme. Ich erhalte trotzdem noch die Meldung das der Servername nicht verarbeitet werden kann. Liegt das irgendwie vielleicht an dem Casting: pstrServer = (LPCTSTR)servername; LPCTSTR login = (LPCTSTR)"user"; LPCTSTR passwd = (LPCTSTR)"password"; Außerdem erhalte ich noch eine Warnung: warning C4002: too many actual parameters for macro '_T' Mein Code jetzt: // KlassenMethodenKonsole.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <iostream> ///////////////////////////////////////////////////////// //Block zum Aufbauen der Verbindung ///////////////////////////////////////////////////////// //Bibliotheken für FTP-Session #include <afx.h> #include <afxwin.h> #include <afxinet.h> #include <stdio.h> int warte; using namespace std; int _tmain(int argc, _TCHAR* argv[]) { if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) { return -1; } //Objekt session wird erzeugt CInternetSession session(_T("My FTP Session",1, INTERNET_OPEN_TYPE_DIRECT)); //Zeiger auf CFtpConnection CFtpConnection *connection; //Deklarationen für GetFtpConnection Member-Funktion char servername[100]="beispielserver"; LPCTSTR pstrServer; pstrServer = (LPCTSTR)servername; LPCTSTR login = (LPCTSTR)"user"; LPCTSTR passwd = (LPCTSTR)"password"; INTERNET_PORT port = 21; BOOL bPassive = FALSE; cout << "Verbinde mit " << servername << " ...\n"; try { //FTP-Verbindung wird eröffnet,Methode GetFtpConnection wird auf session angewandt, connection wird auf zurückgegeben Zeiger gesetzt if(connection = session.GetFtpConnection(pstrServer, login, passwd, port, bPassive)) { cout << "Verbindung wurde aufgebaut"; } } catch (CInternetException* pEx) { cout<<"FEHLER : "<<GetLastError()<<endl; TCHAR sz[1024]; pEx->GetErrorMessage(sz, 1024); printf_s("ERROR! %S\n", sz); pEx->Delete(); } cin >> warte; return 0; } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 25. Januar 2009 Autor Teilen Geschrieben 25. Januar 2009 Morgen, kann mir bitte noch jemand helfen wegen dem Servernamen? Ist mein Casting zu (LPCTSTR) irgendwie falsch? Wie umgehe ich das denn? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 25. Januar 2009 Teilen Geschrieben 25. Januar 2009 kann mir bitte noch jemand helfen wegen dem Servernamen?Bitte kein Threadpushing, siehe Boardregeln. Ist mein Casting zu (LPCTSTR) irgendwie falsch? Ein Cast bedeutet, dass hier der Programmierer besser weiß, was richtig ist, als der Compiler. Deswegen sollte man Casts auch nur einsetzen, wenn man weiß, was man tut. Keinesfalls sollte man versuchen, mit Cast Compilezeitfehler zu beheben. Das hat nur den Effekt, dass der Compiler dann zwar nicht mehr meckert, man sich dafür aber Laufzeitfehler einhandelt. Was soll dieser Cast denn bewirken? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 25. Januar 2009 Autor Teilen Geschrieben 25. Januar 2009 Moin, laut msdn ist das Casting doch notwendig? Dort wird doch als Datentyp für CInternetSession::GetFtpConnection LPCTSTR vorgegeben. Und dann habe ich halt gecastet:). Wenn ich nicht caste bekomme ich error C2440: '=' : cannot convert from 'char [100]' to 'LPCTSTR'. als Fehlermeldung. Deswegen muss ich doch casten, oder nicht? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 25. Januar 2009 Teilen Geschrieben 25. Januar 2009 laut msdn ist das Casting doch notwendig? Dort wird doch als Datentyp für CInternetSession::GetFtpConnection LPCTSTR vorgegeben. Und dann habe ich halt gecastet:).Und genau das ist falsch. Casten bewirkt keine magische Typumwandlung. Casten ist rohe Gewalt. Wenn ich nicht caste bekomme ich als Fehlermeldung. Deswegen muss ich doch casten, oder nicht?Nein, das habe ich doch im letzten Beitrag erklärt. Mit dem Cast erreichst du nur, dass der Compiler den Mund hält. Der Code bleibt so falsch, wie er war. Casts braucht man nur sehr selten. Leider gewöhnen sich Anfänger oft an, Compilefehler wegen unpassender Typen durch Casts zu "beheben". Gewöhn dir diesen Reflex "Typfehler -> Casten" bitte ganz schnell wieder ab. Dein Zeichenkettenliteral ist ein Array von const char. Du brauchst LPCTSTR, das ist ein Zeiger auf const TCHAR. TCHAR ist, abhängig davon, ob du Unicode benutzt oder nicht, entweder char oder wchar_t bzw. WCHAR. In deinem Fall ist Unicode definiert, sonst würde der Compiler keine Fehler ausgeben, wenn du den Code weglässt. Benutzt das _T-Makro für deine Stringliterale. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 26. Januar 2009 Autor Teilen Geschrieben 26. Januar 2009 Guten Morgen, also ich habe es jetzt ohne Proxy hinbekommen! Danke für die Hilfe:uli Mit Proxy kriege ich das leider noch nicht hin. Irgendwas stimmt noch nicht mit meinem: session.SetOption h. Der Rückgabewert ist 0 und getLastError sagt ERROR_INTERNET_INCORRECT_HANDLE_TYPE 12018 The type of handle supplied is incorrect for this operation. bool abc = false; abc = session.SetOption( INTERNET_OPTION_PROXY_PASSWORD, _T("meinpassword1"), _tcslen(_T("meinpassword1")) ); cout << abc << "\n"; cout<<"FEHLER : "<<GetLastError()<<endl; Habe das ja genauso umgesetzt wie hier im Forum geschrieben. Sieht noch jemand meinen Fehler? Ist das _tcslen dazu da die Länge vom Buffer zu bestimmen? meinpassword1 muss ja vom Typ lpvoid sein, ist das _T vielleicht falsch? Grüße Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 26. Januar 2009 Teilen Geschrieben 26. Januar 2009 Ich habe ein wenig gesucht und dabei mehrere Hinweise auf dasselbe Problem, aber keine definitive Lösung gefunden. Es scheint, als ob du die Proxy-Options über das Connect-Handle setzen musst, nicht über das Session-Handle. Siehe: Setting and Retrieving Internet Options (Windows) Leider habe ich den MFC-Code hier gerade nicht zur Hand, daher kann ich nicht nachsehen, wie das genau in CInternetSession gekapselt ist. Ich könnte mir aber vorstellen, dass das mit MFC möglicherweise gar nicht geht, du also die "rohe" WinAPI benutzen musst. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 26. Januar 2009 Autor Teilen Geschrieben 26. Januar 2009 I Ich könnte mir aber vorstellen, dass das mit MFC möglicherweise gar nicht geht, du also die "rohe" WinAPI benutzen musst. Na gut oder auch nicht. Dann versuche ich das erst mal mit einem offenen Proxy. Allerdings bekomme ich da immer noch die Meldung, dass der Servername oder die Serveradresse nicht verarbeitet werden konnten. Kann das am Makro _T bei LPCTSTR pstrServer = _T("ftp://beispiel.org"); liegen? Dass das Makro falsch umwandelt? int _tmain(int argc, _TCHAR* argv[]) { if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) { return -1; } //Objekt session wird erzeugt CInternetSession session(_T("My FTP Session",1, INTERNET_OPEN_TYPE_PROXY , "beispielproxy", NULL, 0)); CFtpConnection *connection; //Deklarationen für GetFtpConnection Member-Funktion char servername[100]="ftp://beispiel.org"; LPCTSTR pstrServer = _T("ftp://beispiel.org"); LPCTSTR login = _T("user"); LPCTSTR passwd = _T("password"); INTERNET_PORT port = 21; BOOL bPassive = FALSE; cout << "Verbinde mit " << servername << " ...\n"; try { //FTP-Verbindung wird eröffnet,Methode GetFtpConnection wird auf session angewandt, connection wird auf zurückgegeben Zeiger gesetzt if(connection = session.GetFtpConnection(pstrServer, login, passwd, port, bPassive)) { cout << "Verbindung wurde aufgebaut"; } } catch (CInternetException* pEx) { cout<<"FEHLER : "<<GetLastError()<<endl; TCHAR sz[1024]; pEx->GetErrorMessage(sz, 1024); printf_s("ERROR! %S\n", sz); pEx->Delete(); Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 26. Januar 2009 Teilen Geschrieben 26. Januar 2009 Kann das am Makro _T bei LPCTSTR pstrServer = _T("ftp://beispiel.org"); liegen? Dass das Makro falsch umwandelt?Nein, das Makro macht in deinem Fall nur ein L vor das Stringliteral, nichts weiter. Allerdings hat das "ftp://" da nichts verloren. Da soll nur der Servername rein, kein URL. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 26. Januar 2009 Autor Teilen Geschrieben 26. Januar 2009 Moin, also wenn da auch nicht der Fehler ist, wo ist der dann..... Kann diese Zeile Ursache für mein Problem sein? CInternetSession session(_T("My FTP Session",1, INTERNET_OPEN_TYPE_PROXY , "beispiel.man.de.eu.beispiel.Corp:21", NULL, 0)); Ich erhalte für das Makro _T die Warnung das ich zu viele Parameter hätte. Für jeden Parameter einzeln anwenden kann ich das Makro ja auch nicht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 26. Januar 2009 Teilen Geschrieben 26. Januar 2009 Ich erhalte für das Makro _T die Warnung das ich zu viele Parameter hätte. Für jeden Parameter einzeln anwenden kann ich das Makro ja auch nicht.Du sollst es auch nur dort anwenden, wo es nötig ist, also dort, wo ein LPCTSTR gefragt ist, du aber nur ein char-Literal hast. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.