wulfgang Geschrieben 21. Januar 2009 Teilen Geschrieben 21. Januar 2009 (bearbeitet) Hallo, ich möchte ein Programm schreiben, das Dateien über einen Proxy-Server mit dem FTP-Protokoll eine Verbindung zu einem anderen Server herstellt. Der Compiler läuft auch ohne Probleme nur beim Ablaufen des Programms kommt folgende Fehlermeldung: Debug Assertion Failed File f:\rmt\vctools\vc7libs\ship\atlmfc\include\afxwin1.inl Ich benutze Visual Studio 2005 und schreibe das ganze als Konsolenanwendung. Wo liegt mein Fehler? Schon mal vielen Dank für die Mühe! ///////////////////////////////////////////////////////// //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; //Zeiger auf CFtpConnection CFtpConnection *connection; //Deklarationen für GetFtpConnection Member-Funktion char servername[100]="beispielserver.org"; LPCTSTR pstrServer; pstrServer = (LPCTSTR)servername; LPCTSTR login = NULL; LPCTSTR passwd = NULL; INTERNET_PORT port = 21; BOOL bPassive = FALSE; cout << "Verbinde mit " << servername << " ...\n"; //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"; } } Bearbeitet 21. Januar 2009 von wulfgang Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 21. Januar 2009 Teilen Geschrieben 21. Januar 2009 Normalerweise kommt der Fehler dadurch das du irgendwo in Speicher reingeschrieben hast wo du nicht reinschreiben sollst bzw. über Feldgrenzen hinweggeschrieben hast. In dem Code Stück oben konnte ich aber jetzt nichts sehen... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 21. Januar 2009 Teilen Geschrieben 21. Januar 2009 pstrServer = (LPCTSTR)servername;Der Cast sieht verdächtig aus. Was passiert, wenn du hier nicht castest? Und bitte benutz beim nächsten Mal Code-Tags. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 21. Januar 2009 Teilen Geschrieben 21. Januar 2009 Aber wenn Unicode aktiviert wäre dann dürfte doch das einzige was passiert sein das der Servername falsch interpretiert wird oder? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 21. Januar 2009 Teilen Geschrieben 21. Januar 2009 Aber wenn Unicode aktiviert wäre dann dürfte doch das einzige was passiert sein das der Servername falsch interpretiert wird oder?Ordentlich nullterminiert wird er dann auch nicht mehr sein. @wulfgang: Im Programmordner von Visual C++ solltest du eine Datei namens afxwin1.inl finden. Bei der Fehlermeldung steht auch eine Zeilennummer dabei. Zeig bitte mal, was da steht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 21. Januar 2009 Teilen Geschrieben 21. Januar 2009 Ordentlich nullterminiert wird er dann auch nicht mehr sein. Stimmt da hast du Recht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 21. Januar 2009 Autor Teilen Geschrieben 21. Januar 2009 Moin, also wenn ich nicht caste, kommt folgende Fehlermeldung: : error C2440: '=' : cannot convert from 'char [100]' to 'LPCTSTR'. In der 29.Zeile von afxwin1.inl steht { ASSERT(afxCurrentAppName != NULL); return afxCurrentAppName; } Hat das was zu beudeuten? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 21. Januar 2009 Teilen Geschrieben 21. Januar 2009 Wie legst du die CInternetSession an? Gibts du da einen Namen mit? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 21. Januar 2009 Autor Teilen Geschrieben 21. Januar 2009 CInternetSession anlegen? Namen mitgeben? Ich dachte der Befehl "CInternetSession session;" reicht. Was meinst du genau mit CInternetSession anlegen und Namen mitgeben? Habe was Netzwerk angeht leidernur sehr eingeschränkte Kenntnisse. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 21. Januar 2009 Teilen Geschrieben 21. Januar 2009 Ach da oben stehts ja, hab ich überlesen. Gib dem mal eine Namen mit zum Beispiel: CInternetSession session("Test"); Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 21. Januar 2009 Teilen Geschrieben 21. Januar 2009 Ich vermute, da fehlt ein globales CWinApp-Objekt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 21. Januar 2009 Autor Teilen Geschrieben 21. Januar 2009 Nabend, wollte das ganze eigentlich noch mal zu Hause ausprobieren. Erhalte aber leider die Meldung: LINK : fatal error LNK1104: Datei "nafxcwd.lib" kann nicht geoeffnet werden Legt also an #include <afx.h> #include <afxwin.h> #include <afxinet.h> Muss ich da irgendwie was runterladen oder nur eine Einstellung ändern? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 22. Januar 2009 Autor Teilen Geschrieben 22. Januar 2009 Morgen, also ich habe jetzt einfach dem einem Namen gegeben. CInternetSession session("Test"); Erhalte jetzt die Fehlermeldungerror: C2664: 'CInternetSession::CInternetSession(LPCTSTR,DWORD_PTR,DWORD,LPCTSTR,LPCTSTR,DWORD)' : cannot convert parameter 1 from 'const char [5]' to 'LPCTSTR' Kann mir bitte noch mal jemand helfen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 22. Januar 2009 Teilen Geschrieben 22. Januar 2009 Hast du ein globales CWinApp-Objekt? 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, erst einmal eine gute Nachrichtt. Mein alter Fehler von heute morgen ist weg. Habe jetztgeschrieben: //Objekt session wird erzeugt CInternetSession session(_T("My FTP Session")); Stattdessen kommt während der Ausführung des Programms jetzt die Meldung: Unhandled exception at 0x7c812a5b in KlassenMethodenKonsole.exe: Microsoft C++ exception: CInternetException at memory location 0x0012fcd4.. Und ich habe keine Ahnung was das jetzt wieder sein soll:confused: Zu deiner Frage:Habe bisher noch nie bewusst ein globales CWinApp-Objekt erstellt. Wo würde ich das denn finden oder erzeugen? Habe gerade mal gegoogelt aber war irgendwie nichts so wirklich hilfreiches, nur dass für jede Anwendung nur eines existieren kann. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 22. Januar 2009 Teilen Geschrieben 22. Januar 2009 Stattdessen kommt während der Ausführung des Programms jetzt die Meldung: Unhandled exception at 0x7c812a5b in KlassenMethodenKonsole.exe: Microsoft C++ exception: CInternetException at memory location 0x0012fcd4.. Und ich habe keine Ahnung was das jetzt wieder sein soll:confused:Das ist eine Ausnahme (Exception). Ausnahmebehandlung ? Wikipedia CInternetSession::GetFtpConnection wirft im Fehlerfall eine Ausnahme vom Typ CInternetException: CInternetSession::GetFtpConnection Wenn du eine Fehlerbehandlung in dein Programm einbauen willst (was du tun solltest), musst du die Ausnahme fangen und auswerten. Zu deiner Frage:Habe bisher noch nie bewusst ein globales CWinApp-Objekt erstellt. Wo würde ich das denn finden oder erzeugen? Wenn das Problem mit der Assertion nicht mehr auftritt, hat sich das erledigt. Aber normalerweise würde man einfach eine globale CWinApp-Variable anlegen: CWinApp theApp; Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 22. Januar 2009 Autor Teilen Geschrieben 22. Januar 2009 Moin, habe jetzt das Exception Handling eingebaut. Nur kann ich mit der Meldung nicht so viel anfangen. Ich erhalte nämlich nur die Ausgabe "Error! D" Error stammt ja von mir. Was soll mir das D sagen? #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")); //Zeiger auf CFtpConnection CFtpConnection *connection; //Deklarationen für GetFtpConnection Member-Funktion char servername[100]="onlinenham.dyndns.org"; LPCTSTR pstrServer; pstrServer = (LPCTSTR)servername; LPCTSTR login = NULL; LPCTSTR passwd = NULL; 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) { 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 22. Januar 2009 Teilen Geschrieben 22. Januar 2009 Error stammt ja von mir. Was soll mir das D sagen?Das ist ein Wide-Character-String. Benutz %S. 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, ich benutze doch %S. Ob %s oder %S ist doch egal, oder? Habe wohl irgendwas falsch verstanden..... Was meintest du? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 22. Januar 2009 Teilen Geschrieben 22. Januar 2009 ich benutze doch %S.Nein, du benutzt %s. Ob %s oder %S ist doch egal, oder? Nein. printf Type Field Characters Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 22. Januar 2009 Autor Teilen Geschrieben 22. Januar 2009 Okay hattest Recht mit %S. Bekomme jetzt eine Fehlermeldung: "Der Servername oder die Serveradresse konnten nicht verarbeitet werden". 1)Meine Syntax zum Aufbau der Verbindung ist wohl jetzt richtig? 2)Bei getFtpConnection muss ich doch auch den Zielserver angeben, oder? Ich will ja über einen Proxy-Server eine Verbindung mit Ftp zu einem anderem Server. 3)Muss ich den Proxy-Server noch irgendwo angeben? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 22. Januar 2009 Teilen Geschrieben 22. Januar 2009 1)Meine Syntax zum Aufbau der Verbindung ist wohl jetzt richtig?Syntaxfehler würde der Compiler melden. 2)Bei getFtpConnection muss ich doch auch den Zielserver angeben, oder?Ja. 3)Muss ich den Proxy-Server noch irgendwo angeben?Na sicher. CInternetSession::CInternetSession Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 22. Januar 2009 Autor Teilen Geschrieben 22. Januar 2009 Habe versucht CInternetSession::CInternetSession zu implementieren. Leider kommen noch ein paar Fehler: "error C2275: 'LPCTSTR' : illegal use of this type as an expression" Mit CInternetSession::CInternetSession kann ich doch mein CInternetSession-Objekt vorinitialisieren. Habe ich da völlig falsch gedacht? ///////////////////////////////////////////////////////// //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( LPCTSTR pstrAgent = NULL, DWORD_PTR dwContext = 1, DWORD dwAccessType = INTERNET_OPEN_TYPE_PROXY, LPCTSTR pstrProxyName = "proxybeispiel-ge", LPCTSTR pstrProxyBypass = NULL, DWORD dwFlags = 0 ) session(_T("My FTP Session")); Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 22. Januar 2009 Teilen Geschrieben 22. Januar 2009 CInternetSession session(_T("My FTP Session"), 1, INTERNET_OPEN_TYPE_PROXY, _T("proxybeispiel-ge") ); Solltest dir nochmal anschauen, wie man einen Konstruktor aufruft Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 22. Januar 2009 Teilen Geschrieben 22. Januar 2009 Mit CInternetSession::CInternetSession kann ich doch mein CInternetSession-Objekt vorinitialisieren. Habe ich da völlig falsch gedacht? Ja, die Syntax ergibt keinen Sinn CInternetSession session(_T("My FTP Session",1, INTERNET_OPEN_TYPE_PROXY , "proxybeispiel-ge", NULL, 0); [/PHP] PS @Klotzkopp: Hab gerade mal in die Doku zu CInternetSession geschaut und das CWinApp Obejct brauchst du wohl nur wenn du keinen Namen übergibst weil dann wohl versucht wird daher einen zu holen. 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.