Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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 von wulfgang

  • Antworten 65
  • Ansichten 6.9k
  • Erstellt
  • Letzte Antwort

Top-Poster in diesem Thema

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.

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?

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.

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?

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?

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.

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;

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();

     }

Hallo,

ich benutze doch %S. Ob %s oder %S ist doch egal, oder? Habe wohl irgendwas falsch verstanden.....

Was meintest du?

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?

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"));

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.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.