Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Morgen,

ich wollte auf main.h zugreifen- finde diese aber nicht.:confused: Wenn ich ein Projekt neu baue, habe ich als Headerdatei nur stdafx.h. Wo ist mein main.h denn geblieben?

Geschrieben

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

Geschrieben

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

};

Geschrieben
Dann wird bloß jedes mal die Verbindung wieder aufgebaut.
Woraus schließt du das? Der Aufruf von getLastConnection kann das nicht bewirken. Es wird eine neue Verbindung aufgebaut, wenn du ein Connect-Objekt erstellst. Das solltest du natürlich nur einmal tun.

Und was hat das alles mit main.h zu tun?

Geschrieben (bearbeitet)
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
Geschrieben

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.

Geschrieben
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.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...