PlaySound: Pfad als String übergeben
-
Guten Abend,
Ich möchte der PlaySound-Funktion den Pfad zum Ort der WAV-Datei als Variable übergeben, weil ich den Namen vom Benutzer abfragen will. Die PlaySound-Funktion funktioniert auch soweit, d.h. wenn ich einen Pfad per Hand eintrage geht alles, nur eben nicht bei einer Übergabe wie in folgendem Codeabschnitt:
string name, pfad; while ( name != "exit"){ cin >> name; pfad = "\"Sounds/" + name + ".wav\""; pfad = pfad.c_str(); PlaySound(pfad, NULL, SND_FILENAME); } return 0; }Ich weiß inzwischen auch, dass das Argument in PlaySound ein LPCWSTR sein muss, allerdings weiß ich nicht wie ich den string in einen solchen ändern kann, ich dachte .c_str wäre ausreichend.
Was mache ich falsch?
Viele Grüße
Marc
-
string name, pfad;
while ( name != "exit"){
cin >> name;
pfad = "\"Sounds/" + name + ".wav\"";
PlaySound(pfad.c_str(), NULL, SND_FILENAME);
}
return 0;
}Sollte das noch immer nicht funktionieren, dann stell dein Projekt von Unicode auf Multibyte um und füge evtl. einen Cast hinzu:
PlaySound(static_cast<LPCSTR*>(pfad.c_str()), NULL, SND_FILENAME);
-
nexxxxxx schrieb:
Ich weiß inzwischen auch, dass das Argument in PlaySound ein LPCWSTR sein muss
Nein, das ist ein LPCTSTR.
ich dachte .c_str wäre ausreichend.
Ja, string::c_str() gibt einen const char* zurück, was passen würde. Allerdings speicherst du den Rückgabewert von c_str() wieder in einen String, sodass du nichts gewonnen hast.
lköklö schrieb:
PlaySound(static_cast<LPCSTR*>(pfad.c_str()), NULL, SND_FILENAME);Was soll der Cast? Außerdem ist ein * zu viel.
-
string name, pfad; while ( name != "exit"){ cin >> name; //pfad = "\"Sounds/" + name + ".wav\""; // die "" IM string sind falsch pfad = "Sounds\\" + name + ".wav"; // und unter windows verwendet man normalerweise \ als pfad-trennzeichen (obwohl / auch an vielen Stellen funktioniert) //pfad = pfad.c_str(); // das macht im ideallfall nix und im schlechtesten fall nen schönen laufzeitfehler PlaySoundA(pfad.c_str(), NULL, SND_FILENAME); // wenn du std::string verwendest, dann ruf PlaySoundA auf, für std::wstring PlaySoundW } return 0; }
-
Vielen Dank für die Hilfe! Und danke Hustbaer für diese elegante Lösung, bei meiner Suche im Internet bin ich nie über PlaySoundA gestolpert, danke dafür!
Viele Grüße
Marc
-
(Fast) alle Windows Funktionen die irgendwie mit Strings arbeiten (z.B. entweder direkt String-Parameter nehmen, oder Zeiger auf Structs die Strings enthalten) gibt es als "A" und "W" Version.
Ebenso die entsprechenden Structs.Die "ohne A/W" Version ist in Wirklichkeit nur ein #define, das je nachdem ob UNICODE definiert ist auf xxxA oder xxxW erweitert wird.
-
nexxxxxx schrieb:
Vielen Dank für die Hilfe! Und danke Hustbaer für diese elegante Lösung, bei meiner Suche im Internet bin ich nie über PlaySoundA gestolpert, danke dafür!
Viele Grüße
MarcOha - dann solltest du dich erstmal mit einigen Grundlagen bezüglich der WinAPI vertraut machen.
Bezüglich FunktionsnameW und FunktionsnameA lies dir beispielsweise mal folgendes durch: MSDN - Working with StringsThe Complete Guide to C++ Strings, Part I - Win32 Character Encodings ist ebenfalls lesenswert.
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.