ShellExecute und cast
-
Hallo zusammen
Ich möcht mit ShellExecute eine weitere Anwndung öffnen. Doch bei der Parameterübergabe funktioniert der cast nicht. Also ich mache folgendes:
::ShellExecute(0, L"open", L"person.exe", str_projekt.c_str(), 0, SW_SHOWNORMAL);
Wenn ich das das Konstruckt ausführe kommt folgender Fehler.
[bcc64 Fehler] ein Parameter des Typs 'LPCWSTR' (aka 'const wchar_t *') kann nicht mit einem R-Wert des Typs 'char *' initialisiert werden shellapi.h(74): hier Argumentübergabe an Parameter 'lpParameters'
Wenn ich an Stelle von "str_projekt.c_str()" ein einfacher String mit L"parameter" übergebe so wird das Programm ausgeführt und der Parameter kann in der aufgerufenen Anwendung gelesen werden.
Wenn ich als cast folgendes eingeben "(LPCWSTR)str_projekt.c_str()" dann wird das Programm ausgeführt, aber in der aufgerufenen Anwendung kann er nicht gelesen werden.
Was muss ich machen, dass alles funktioniert?
Gruss Renato
-
Statt
str_projekt.c_str()
str_projekt.w_str()
benutzen.
-
AnsiString::w_str()
gibt es zum Glück nicht.Um einen gewöhnlichen (UTF-16-)String aus einem
AnsiString
zu bekommen, macheString(str_projekt)
. Den zugehörigen C-String bekommst du dann mitString(str_projekt).c_str()
, und den kannst du auch anShellExecute()
übergeben. An der Stelle solltest du dich dann aber auch fragen, warumstr_projekt
überhaupt vom TypAnsiString
und nichtString
ist.
-
Ich verwende meist AnsiString da ich der Meinung bin, dass String und AnsiString synonyme sind.
-
und wenn du es so machst?
ShellExecuteA(0, "open", "person.exe", str_projekt.c_str(), 0, SW_SHOWNORMAL);
-
Robbiani schrieb:
da ich der Meinung bin, dass String und AnsiString synonyme sind.
Da irrst du.
String
undUnicodeString
sind synonym.AnsiString
kann nicht alle Unicode-Zeichen darstellen und deshalb zu Datenverlust führen.
-
Herzlichen Dank für eure Hilfe.
Genau mit ShellExecuteA läuft es.
Was mich wundert sind die verschiedenen Möglichkeiten wo es gibt.
-
audacia|off schrieb:
Da irrst du.
String
undUnicodeString
sind synonym.AnsiString
kann nicht alle Unicode-Zeichen darstellen und deshalb zu Datenverlust führen.Das hängt aber von der verwendeten Version des Builders ab.
-
Braunstein schrieb:
audacia|off schrieb:
Da irrst du.
String
undUnicodeString
sind synonym.AnsiString
kann nicht alle Unicode-Zeichen darstellen und deshalb zu Datenverlust führen.Das hängt aber von der verwendeten Version des Builders ab.
Ich habe jetzt mal unterstellt, daß Robbiani nach wie vor C++Builder XE7 benutzt.
-
Damit hast du sicher recht. Manchmal schaue ich zu sehr durch meine BCB2007 Brille.
-
ShellExecute(0, L"open", L"person.exe", str_projekt.c_str(), 0, SW_SHOWNORMAL);
Würde wohl wahrscheinlich mit der Widestring Funktion "ShellExecuteW" funktionieren.
-
Wenn str_projekt.c_str()ein const char* zurückgibt eben nicht.