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