[erledigt]SendMessageW und ein char-Array
-
Hi,
ich hänge gerade an folgendem: Die Winamp-API bietet mit
char title[100]; sprintf(title, "%s", SendMessage(plugin.hwndParent,WM_WA_IPC, playlistPosition, IPC_GETPLAYLISTTITLE));die Möglichkeit, den Rückgabewert von SendMessage als char-Array zu speichern. Doch leider funktioniert das nicht, wenn Unicode-Zeichen vorkommen. Dann steht an der Stelle im Array nur ein Fragezeichen.
Wie ist es nun möglich, das korrekte Zeichen in ein char-Array zu bekommen? SendMessageW funktioniert nicht, und ein "%ls" in sprintf auch nicht. Nun steh ich auf dem Schlauch.
Danke für die Hilfe,
Martin
-
Entweder du arbeitest grundsätzlich mit TCHAR (in der MSDN steht zu ziemlich jeder Standard-char*-Funktion auch ein UNICODE-Äquivalent) oder du verwendest explizit die ANSI-Version der WinAPI-Funktionen: SendMessageA().
-
Dieser Thread wurde von Moderator/in CStoll 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.
-
http://msdn.microsoft.com/en-us/library/ybk95axf(v=vs.71).aspx
wchar_t title[100]; swprintf(title, L"%s", SendMessage(plugin.hwndParent,WM_WA_IPC, playlistPosition, IPC_GETPLAYLISTTITLE));
-
@CStoll:
In der MSDN stehttypedef char TCHAR;ist es also nicht völlig egal, ob man char oder TCHAR verwendet?
SendMessageA bringt immernoch diese Fragezeichen

@cooky451:
Bei deinem Code meckert der Compiler, dass sprintf als Parameter 1 ein char* erwartet. Mit swprintf funktioniert es, doch dann bekomme ich keine char[]-Darstellung daraus. Folgendes führt nur zu einem einzigen Zeichen:wchar_t tmp[100]; swprintf(tmp, L"%s", SendMessage(plugin.hwndParent,WM_WA_IPC, playlistPosition, IPC_GETPLAYLISTTITLE)); char* ascii = new char[wcslen(tmp) + 1]; wcstombs( ascii, tmp, wcslen(tmp) );
-
inspire schrieb:
@CStoll:
In der MSDN stehttypedef char TCHAR;ist es also nicht völlig egal, ob man char oder TCHAR verwendet?
Was sich hinter TCHAR verbirgt, hängt von deinen Projekteinstellungen ab - bei einem ANSI oder MULTIBYTE-Projekt ist es ein char, bei einem UNICODE-Projekt ist es ein wchar_t. Und das zu mischen kann mitunter in die Augen gehen.
(btw, deine Meldung über SendMessageW sagt auch aus, daß du ein UNICODE-Projekt hast)PS: Bist du dir sicher, daß die WM_WA_IPC-Nachricht einen char-String zurückgibt?
-
Ah danke, in den Compilereinstellungen steht auch _UNICODE bzw UNICODE.
In der Doku zum Winamp SDK steht:
#define IPC_GETPLAYLISTTITLE 212 #define IPC_GETPLAYLISTTITLEW 213 /* (requires Winamp 2.04+, only usable from plug-ins (not external apps)) ** char *name=SendMessage(hwnd_winamp,WM_WA_IPC,index,IPC_GETPLAYLISTTITLE); ** ** IPC_GETPLAYLISTTITLE gets the title of the playlist entry [index]. ** returns a pointer to it. returns NULL on error. */
-
Alles klar, habe es hinbekommen! Danke nochmal!