Problem mit WinApi FTP Funktion
-
void upload(char *server, char *account, char *passwort) { HINTERNET hOpen, hConnection; hOpen = InternetOpen("FTP Upload", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); hConnection = InternetConnect(hOpen, server, INTERNET_DEFAULT_FTP_PORT, account, passwort, INTERNET_SERVICE_FTP, 0, 0); FtpPutFile(hConnection, "C:\\dateiname", "//dateiname", FTP_TRANSFER_TYPE_BINARY, 0); InternetCloseHandle(hConnection); InternetCloseHandle(hOpen); }Also das ist meine Funktion zum "uppen" einer Datei. Nun ist der Dateiname in form eines Strings vorhanden. Da ich bei der Funktion aber keine Stringvariable eingeben kann, sondern explizit einen String eingeben muss, denke ich, dass ich das mit dem WinApi-Pendant des klassischen C++-Strings lösen muss. Wenn nicht, wie könnte ich das sonst lösen? Bin für Vorschläge offen...
Gruß skully
-
Kannst Du Deine Frage auch so formulieren, dass man es versteht?
-
lol du musst ein A an die Funktionen hängen, InternetOpen, InternetConnectA

-
Öhhhh, Du kannst ohne weiteres so etwas machen:
void upload(char *server, char *account, char *passwort) { TCHAR dat1[] = "c:\\dateiname"; TCHAR dat2[] = "//dateiname"; [...] FtpPutFile(hConnection, dat1, dat2, FTP_TRANSFER_TYPE_BINARY, 0); [...] }... falls Du das überhaupt gemeint hast ...
-
machs lieber mit dem A, is besser. bei belli knallts trotzdem noch in InternetOpen^^
-
Sorry, es muß natürlich:
TCHAR dat1[] = TEXT("c:\\dateiname");
TCHAR dat2[] = TEXT("//dateiname");heißen.
-
Jochen Kalmbach schrieb:
Kannst Du Deine Frage auch so formulieren, dass man es versteht?
Sorry, ich merke grad selber... Also...
Nehmen wir an ich habe einen C++ String. Der C++ String hat den Namen "Dateiname". Dateiname ist initialisiert mit "C:\\Users". Dann habe ich eine WinApi Funktion, die als 2. und 3. Argument jeweils den WERT eines Strings erwartet:
Funktioniert:
FtpPutFile(hConnection, "C:\\dateiname", "//dateiname", FTP_TRANSFER_TYPE_BINARY, 0);Funktioniert nicht:
FtpPutFile(hConnection, Dateiname, "//dateiname", FTP_TRANSFER_TYPE_BINARY, 0);Ich möchte den INHALT des Strings "Dateiname" als Argumente an die Funktion übergeben. Wie?
------------------------------------------------------------------------------Belli schrieb:
Öhhhh, Du kannst ohne weiteres so etwas machen:
void upload(char *server, char *account, char *passwort) { TCHAR dat1[] = "c:\\dateiname"; TCHAR dat2[] = "//dateiname"; [...] FtpPutFile(hConnection, dat1, dat2, FTP_TRANSFER_TYPE_BINARY, 0); [...] }... falls Du das überhaupt gemeint hast ...
Wie konvertiere ich einen C++ String in eine WinApi TCHAR?
-
Mit C++ String meinst du wohl std::string. Dann guck dir mal die Methode c_str an...
-
_matze schrieb:
Mit C++ String meinst du wohl std::string. Dann guck dir mal die Methode c_str an...
Das macht daraus eine C-Char, richtig?
Funktioniert das dann auch mit WinApi-Zeichenketten?
-
skullyan schrieb:
Funktioniert das dann auch mit WinApi-Zeichenketten?
Was sind WinAPI-Zeichenketten??
Das funktioniert mit allen Funktionen, die halt einen C-String (char*) erwarten, was bei den meisten WinAPI-Funktionen der Fall ist.
-
_matze schrieb:
skullyan schrieb:
Funktioniert das dann auch mit WinApi-Zeichenketten?
Was sind WinAPI-Zeichenketten??
Das funktioniert mit allen Funktionen, die halt einen C-String (char*) erwarten, was bei den meisten WinAPI-Funktionen der Fall ist.
Ich dachte so nennt man die TCHAR's. Ich werde es probieren, sobald ich zuhause bin! Danke für den Vorschlag.
-
Habe versucht,
std::stringmittelsc_str()zu konvertieren. Dabei kam das raus:Deklaration der Funktion:
void upload(char *newname);Funktion in main():
std::string newname; // [...] upload(newname.c_str());WinApi Funktion:
void upload(char *server, char *account, char *passwort, char *newname) { HINTERNET hOpen, hConnection; hOpen = InternetOpen("FTP Upload", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); hConnection = InternetConnect(hOpen, server, INTERNET_DEFAULT_FTP_PORT, account, passwort, INTERNET_SERVICE_FTP, 0, 0); FtpPutFile(hConnection, newname, "//Dateiname", FTP_TRANSFER_TYPE_BINARY, 0); InternetCloseHandle(hConnection); InternetCloseHandle(hOpen); }DER FEHLER:
error C2664: 'upload': Konvertierung des Parameters 4 von 'const char *' in 'char *' nicht möglich Durch die Konvertierung gehen Qualifizierer verloren
-
jo einmal hirn anschalten und nochmal versuchen.
-
skullyan schrieb:
[/cpp]
WinApi Funktion:
[cpp]void upload(const char *server, const char *account, const char *passwort, const char *newname)