[solved] C++ Ftp mit HINTERNET



  • Hallo liebe Community,
    Ich will in meinem Programm eine Klasse erstellen mit der ich auf meinen lokalen Ftp-Server Datein senden, laden und löschen kann doch wenn ich debugge kommt folgende Fehlermeldung aus der ich nicht ganz schlau werde:

    1>------ Erstellen gestartet: Projekt: Programm, Konfiguration: Debug Win32 ------
    1>FTP.cpp
    1>FTP.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__InternetOpenA@20" in Funktion ""public: static void __cdecl FTP::deleteFile(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?deleteFile@FTP@@SAXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)".
    1>FTP.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__InternetConnectW@32" in Funktion ""public: static void __cdecl FTP::deleteFile(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?deleteFile@FTP@@SAXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)".
    1>FTP.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__FtpGetFileA@28" in Funktion ""public: static void __cdecl FTP::getFile(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?getFile@FTP@@SAXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@0@Z)".
    1>FTP.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__FtpPutFileA@20" in Funktion ""public: static void __cdecl FTP::sendFile(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?sendFile@FTP@@SAXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@0@Z)".
    1>FTP.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__FtpDeleteFileA@8" in Funktion ""public: static void __cdecl FTP::deleteFile(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?deleteFile@FTP@@SAXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)".
    1>G:\Development\C++ Projekte\Programm\Debug\Programm.exe : fatal error LNK1120: 5 nicht aufgelöste Externe
    1>Die Erstellung des Projekts "Programm.vcxproj" ist abgeschlossen -- FEHLER.
    ========== Erstellen: 0 erfolgreich, 1 fehlerhaft, 0 aktuell, 0 übersprungen ==========
    

    Hier ist der Code der FTP.h

    #pragma once
    #include <string>
    #include <Windows.h>
    #include <WinInet.h>
    
    using namespace std;
    
    class FTP
    {
    public:
    	static void sendFile(string stringdiskFileName, string stringServerFileName);
    	static void getFile(string stringServerFileName, string stringdiskFileName);
    	static void deleteFile(string stringServerFileName);
    };
    

    Und hier der Code der FTP.cpp

    void FTP::sendFile(string stringdiskFileName, string stringServerFileName)
    {
    	const char* ccharDiskFileName = stringdiskFileName.c_str();
    	const char* ccharServerFileName = stringServerFileName.c_str();
    	HINTERNET FtpIO, FtpSession;
    	FtpIO = InternetOpenA("admin", INTERNET_OPEN_TYPE_DIRECT, "127.0.0.1", 0, INTERNET_FLAG_ASYNC);
    	FtpSession = InternetConnect(FtpIO, L"127.0.0.1", INTERNET_DEFAULT_FTP_PORT, L"admin", L"hier steht das passwort beim debuggen", INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
    	FtpPutFileA(FtpSession, ccharDiskFileName, ccharServerFileName, FTP_TRANSFER_TYPE_BINARY, 0);
    }
    
    void FTP::getFile(string stringServerFileName, string stringdiskFileName)
    {
    	const char* ccharServerFileName = stringServerFileName.c_str();
    	const char* ccharDiskFileName = stringdiskFileName.c_str();
    	HINTERNET FtpIO, FtpSession;
    	FtpIO = InternetOpenA("admin", INTERNET_OPEN_TYPE_DIRECT, "127.0.0.1", 0, INTERNET_FLAG_ASYNC);
    	FtpSession = InternetConnect(FtpIO, L"127.0.0.1", INTERNET_DEFAULT_FTP_PORT, L"admin", L"hier steht das passwort beim debuggen", INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
    	FtpGetFileA(FtpSession, ccharServerFileName, ccharDiskFileName, FALSE, 0, FTP_TRANSFER_TYPE_BINARY, 0);
    }
    
    void FTP::deleteFile(string stringServerFileName)
    {
    	const char* ccharServerFileName = stringServerFileName.c_str();
    	HINTERNET FtpIO, FtpSession;
    	FtpIO = InternetOpenA("admin", INTERNET_OPEN_TYPE_DIRECT, "127.0.0.1", 0, INTERNET_FLAG_ASYNC);
    	FtpSession = InternetConnect(FtpIO, L"127.0.0.1", INTERNET_DEFAULT_FTP_PORT, L"admin", L"hier steht das passwort beim debuggen", INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
    	FtpDeleteFileA(FtpSession, ccharServerFileName);
    }
    

    Ich weiß das ich auch direkt einen const char* abverlangen könnte. Doch ich würde gern weiterhin mit strings arbeiten das ich sie einfacher in z.B. einer if abfrage vergleichen kann.
    Falls ihr aus dem Error-Log schlau werdet würde ich mich über eine Rückmeldung mit Fehleranalyse und Verbesserungsvorschlägen freuen.

    Mfg Felix



  • @Felix sagte in C++ Ftp mit HINTERNET:

    wenn ich debugge

    Nein, wenn du übersetzt.

    Wo kommt InternetOpen usw. her? Da fehlt wohl die passende Lib beim Binden.



  • InternetOpenA kommt von HINTERNET bzw. WinInet.h, aber das ist doch eine Standard-lib in Vs 2019 oder nicht? Sie wird jedenfalls nicht als fehlend angezeigt.



  • @Felix sagte in C++ Ftp mit HINTERNET:

    Sie wird jedenfalls nicht als fehlend angezeigt.

    Was glaubst du, was die Meldungen bedeuten?



  • @Felix sagte in C++ Ftp mit HINTERNET:

    bzw. WinInet.h,

    Da steht die Deklaration. Es fehlt die WinInet.lib.



  • @manni66 Du hast recht!
    hab einfach vergessen

    #pragma comment(lib, "wininet.lib")
    

    zu schreiben. Vielen Dank!
    Konnte mir nicht ganz herleiten was die Fehlermeldung bedeutete.


Log in to reply