Zum Inhalt springen

main.h


wulfgang

Empfohlene Beiträge

main.h ist kein besonderer Header. Es ist weder ein Standardheader, noch einer, der von VC automatisch angelegt wird. Du kannst deine eigenen Header nennen, wie du willst, main.h nimmt da keine Sonderstellung ein. Ich weiß nicht, worauf du zugreifen wolltest, aber da steht nichts drin, was du nicht selbst hineinschreibst.

Beschreib doch mal das Problem, nicht das, was du für die Lösung hältst ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich schreibe einen FTP-Clienten. Mit GetFtpConnection bekomme ich meinen Zeiger auf ein CInternetSession Objekt. Nun habe ich verschiedene Klassen zum Löschen, Runterladen, Hochladen...Bisher muss ich dann für jede dieser Funktionen/Klassen eine neue Verbindung aufbauen. Mein Ziel ist es, dass ich die Verbindung nur einmal aufbauen muss. Jetzt kann ich ja in einer anderen Klasse sagen

connection_pointer=Connect::getLastConnection();
Dann wird bloß jedes mal die Verbindung wieder aufgebaut. Connect.cpp
CFtpConnection* Connect::connection_pointer=NULL;

CInternetSession session((_T("My FTP Session")),1, INTERNET_OPEN_TYPE_PROXY ,

	                          (_T( "proxy")), NULL, 0);  


Connect::Connect(void)

{


	//Objekt session wird erzeugt


	//Zeiger auf CFtpConnection

	CFtpConnection *connection;

	//Objekt der Klasse read_serverlist wird erzeugt

	read_serverlist LeseListe;CFtpConnection * 

             		if(connection = session.GetFtpConnection(pstrServer, LeseListe.servername, LeseListe.password, port, bPassive)) 

			{

			cout << "Verbindung wurde aufgebaut\n";     

			connection_pointer=connection; 

			}


	}

Connect::getLastConnection() 

{ 

	return connection_pointer; 

}
Connect.h
class Connect : public read_serverlist

{

public:

	Connect(void);

	static CFtpConnection * Connect::getLastConnection(); 

	static CFtpConnection *connection_pointer;

	void give_connection(void);

public:

	~Connect(void);

};

Link zu diesem Kommentar
Auf anderen Seiten teilen

Woraus schließt du das?
Ich habe in der Methode Connect eine Bildschirmausgabe mit eingebaut. Wenn ich nun
transfer_textfile(); delete_textfile();
aufrufe erhalte ich zwei Bildschirmausgaben. Lag wohl daran dass transfer_textfile von Connect abgeleitet ist. delete_textfile.h
class delete_textfile

{

public:

	delete_textfile(void);

public:

	~delete_textfile(void);

};
delete_textfile.cpp
delete_textfile::delete_textfile(void)

{		

			Connect();

			CFtpConnection* connection_pointer;

			connection_pointer=Connect::getLastConnection();


	        //Objekt der Klasse read_serverlist wird erzeugt

			read_serverlist LeseListe;

			//Textdatei wird gelöscht

			BOOL bWorking = connection_pointer->Remove

			(LeseListe.source_txt);

			if (bWorking)

				{

					cout << "Datei ist gelöscht worden";

				}


			else

				{

					cout << GetLastError();

				}





}
in transfer_textfile.cpp
transfer_textfile::transfer_textfile(void)

{	



	CFtpConnection* connection_pointer;


		read_serverlist LeseListe;



	connection_pointer=Connect::getLastConnection();

	CFtpFileFind finder(connection_pointer);

	try

	{

		//Verzeichnis wird gewechselt

		if(connection_pointer->SetCurrentDirectory(_T("automatic/get_bu")))								

		{

			cout<<"Verzeichnis wurde mit Erfolg! gewechselt\n";


			//Datei wird gesucht

			BOOL bWorking = finder.FindFile(_T("bu.txt"));

			if(bWorking)

				{ 

					//Datei wird vom  Server auf lokale Festplatte transferriert

					BOOL bGot = connection_pointer->GetFile(_T("bu.txt"),LeseListe.destination_txt,FALSE);

					if (bGot)

					{

						cout << "Transfer sollte erfolgt sein\n";

					}

					else

					{

						cout << GetLastError() << "\n";

					}

				}

						else

				{



						cout << "The File specified could not be found.!"<<GetLastError();

		}		}

					else

		{

			DWORD dwInfo = 0; 

			TCHAR puffer[250] = _T("");

			DWORD dwSize = sizeof(puffer) / sizeof(TCHAR);

			if( !InternetGetLastResponseInfo(&dwInfo, puffer, &dwSize) )

					{

						cout << GetLastError();

					    cout << "Aufruf InternetGetLastResponseInfo nicht erfolgreich";


			else

					{

						wcout << puffer;

						cout << "Aufruf InternetGetLastResponseInfo erfolgreich";

					}


		}

	}


	catch(CException* error)

    {

        TCHAR szCause[1024];

		error->GetErrorMessage(szCause,1024);

        printf_s("ERROR!  %S\n", szCause);

        error->Delete();

    }



}
transfer_textfile.h
class transfer_textfile : public Connect

{

public:

	transfer_textfile(void);


public:

	~transfer_textfile(void);

};

Und was hat das alles mit main.h zu tun?
Ich wollte in main.h eine Klasse Connect als Member erstellen, um dann darauf zugreifen zu können. Bearbeitet von wulfgang
Problem vorerst geklärt
Link zu diesem Kommentar
Auf anderen Seiten teilen

transfer_textfile.h

class transfer_textfile : public Connect
[/code]

Dadurch, dass transfer_textfile von Connect erbt, wird jedesmal, wenn du ein transfer_textfile-Objekt erstellst, der Connect-Konstruktor aufgerufen, der dann eine neue Verbindung erstellt.

Warum erbt transfer_textfile eigentlich von Connect? Public-Vererbung stellt eine "ist ein"-Beziehung dar. Ein "transfer_textfile" [i]ist ein[/i] "Connect"?

Ich wollte in main.h eine Klasse Connect als Member erstellen, um dann darauf zugreifen zu können.

Du musst gar nicht darauf zugreifen, du musst nur dafür sorgen, dass eine einzige Instanz erstellt wird. Der Zugriff geschieht über den statischen Zeiger, für den brauchst du keine Instanz der Klasse.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ein "transfer_textfile" ist ein "Connect"?
Hat Beziehung wäre wohl besser. Habe die Vererbung bei transfer_textfile jetzt rausgenommen.


int _tmain(int argc, _TCHAR* argv[])

{	

	int warte;

	Connect();

	transfer_textfile();

	delete_textfile();

	cin >> warte;


	return 0;


}
delete.cpp habe ich jetzt auch geändert:
delete_textfile::delete_textfile(void)

{		


			CFtpConnection* connection_pointer;

			connection_pointer=Connect::getLastConnection();


	        //Objekt der Klasse read_serverlist wird erzeugt

			read_serverlist LeseListe;

			//Textdatei wird gelöscht

			BOOL bWorking = connection_pointer->Remove

			(LeseListe.source_txt);

			if (bWorking)

				{

					cout << "Datei ist gelöscht worden";

				}


			else

				{

					cout << GetLastError();

					DWORD dwInfo = 0; 

			TCHAR puffer[250] = _T("");

			DWORD dwSize = sizeof(puffer) / sizeof(TCHAR);

			if( !InternetGetLastResponseInfo(&dwInfo, puffer, &dwSize) )

					{

						cout << GetLastError();

					    cout << "Aufruf InternetGetLastResponseInfo nicht erfolgreich";

					}

			//Fehlerbehandlung falls InternetGetLastResponseInfo nicht aufgerufen werden konnte

			else

					{

						wcout << puffer;

						cout << "Aufruf InternetGetLastResponseInfo erfolgreich";

					}

				}

Das Problem: Wenn ich in delete_textfile den Konstruktor von Connect nicht ausführe bekomme ich die Meldung dass das File nicht gefunden wurde. Rufe ich aber erst delete_textfile(); und dann transfer_textfile(); aus funktioniert es. Ich bin noch nicht dahintergekommen wieso.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...