FTP: HINTERNET als Variable?



  • Kann mir jemand sagen, warum ich die Variable HINTERNET nicht
    als Klassenvariable hinterlegen kann?

    Ich erhalte dann immer den Verweis auf meiner Headerdatei:

    Syntaxfehler: Fehlendes ';' vor Bezeichner 'session'

    in der FTPDlg.h:

    public:
    	afx_msg void OnBnClickedButton1();
    	CListBox m_box;
    	afx_msg void OnBnClickedButton2();
    	afx_msg void OnLbnDblclkList1();
    	void firstFTPRoot(void);
    	void askFTP(CString folder);
    	HINTERNET session; //<<--Fehler??
    
    HINTERNET session, ftp, hFtpFind; 
    WIN32_FIND_DATA FindData; 
    ftp = NULL; 
    
    session = InternetOpen("FTP-Session", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); 
    //usw. usw.
    

    Hintergrund ist, dass ich in verschiedenen Funktionen mit der geöffneten
    FTP-Session weiter arbeiten will.



  • Weil HINTERNET nicht definiert ist.
    Doku lesen!

    greetz, Swordfish



  • Ok, aber muss ich nicht sogar zwingend wieder eine neue session
    nutzen, um eine Dateisuche in einem Verzeichnis (in das ich gewechselt habe)
    durchzuführen?



  • Ok, auf die Gefahr hin, mich zu wiederholen: Doku lesen!

    greetz, Swordfish



  • Auf die Gefahr hin noch so eine "nützliche" Info zu erhalten:

    Ja, ich habe in der MSDN gelesen. Und deshalb auch gesehen, dass
    ich eine neue Session dafür benötige 😃 🙄

    After calling FtpFindFirstFile and until calling InternetCloseHandle, the application cannot call FtpFindFirstFile again on the given FTP session handle. If a call is made to FtpFindFirstFile on that handle, the function fails with ERROR_FTP_TRANSFER_IN_PROGRESS. After the calling application has finished using the HINTERNET handle returned by FtpFindFirstFile, it must be closed using the InternetCloseHandle function.

    Mit dem gidf.de-Link hat sich hier schon unser Azubi unbeliebt gemacht.👎



  • HINTERNET als Variable kannst Du immer wieder von neuem benutzen.
    Du musst einfach sicher stellen, dass die Variable mit InternetOpen ein Handle erzeugen und mit InternetCloseHandle das Handle wieder freigeben.

    z.B. HINTERNET Variable als Member einer Klasse, dann im Constructor initialisieren (InternetOpen) und im Destruktor freigeben (InternetCloseHandle).

    Simon



  • Danke Simon 👍



  • Simon, was sich mir noch für eine Frage stellt...

    Ich rufe: InternetOpen und InternetConnect auf, dann sollte doch eigentlich
    durchgängig, bis ich mein Handle schließe die Verbindung aktiv bleiben
    und ich damit FtpGetCurrentDirectory usw. in meinen anderen Funktionen
    der gleichen Klasse aufrufen können?!

    Ich stelle da immer wieder fest, obwohl ich Open und Connect bereits
    in meiner Dialog-Initialisierung gerufen habe, dass ich irgendwann einen
    Verbindungsabbruch erhalte (ERROR_FTP_TRANSFER_IN_PROGRESS).

    Dann scheint es ja doch so zu sein (wie unten im Quote beschrieben), dass
    ich erneut eine Session erzeugen muss (connect und open ??)😕

    A little confused now 😞


Anmelden zum Antworten