2016-07-07 25 views
1

Ich versuche, eine Listbox mit C++ in Visual Studio zu füllen. Ich habe eine Reihe von Std: String und ich möchte sie verwenden. Meine Lösung scheint nicht zu funktionieren:Abrufen von Müll mit SendMessage zum Auffüllen einer Listbox

std::string label = "something"; 
char *buffer; 
buffer = _strdup((label).c_str()); 

I geprüft und die Puffervariable enthält die korrekte Zeichenfolge, aber dann nenne ich Sendmessage

SendMessage(hwndList, LB_ADDSTRING, 0, (LPARAM)buffer); 

Die List-Box wird bevölkert, aber anstelle von „etwas“ Ich sehe einige zufällige japanische Zeichen ...

+2

Was passiert, wenn Sie 'SendMessageA' anstelle von' SendMessage' verwenden? – MikeCAT

+0

es funktioniert !! Ich muss darüber nachforschen ... danke !! – rekotc

+0

Das Code-Segment hat einen Speicherverlust von '_strdup', wenn es sich nur um den Beispielcode handelt. Außerdem ist der Aufruf "_strdup" nicht erforderlich. –

Antwort

1

ist ein Makro und es kann zu SendMessageW definiert werden, das Unicodezeichenfolge verwendet.

Sie verwenden std::string und char, versuchen Sie also mit SendMessageA, die explizit ANSI-Zeichenfolgen verwendet.

+2

Falsche Lösung. Verwenden Sie Unicode-Text. –