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 AnsiStringzu 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 TypAnsiStringund nichtStringist.
 
- 
					
					
					
					
 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. StringundUnicodeStringsind synonym.AnsiStringkann 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. StringundUnicodeStringsind synonym.AnsiStringkann 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. StringundUnicodeStringsind synonym.AnsiStringkann 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. 
 
