ShellExecute und cast
-
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.