2012-04-07 3 views
0

Ich schreibe ein benutzerdefiniertes Text-in-Sprache-Programm, das SAPI 5 verwendet, und ein Problem, das ich konfrontiert ist, ist die Aufzählung von Stimmen mit SpEnumTokens und Iteration über sie erzeugt CSpDynamicString Objekte.Wie konvertiere ich von CSpDynamicString in `char *` mit ATL?

Meine Frage ist, wie konvertiere ich CSpDynamicString zu char * so könnte ich printf ihnen?

Es sieht so aus, als müsste ich eine Art Textkonvertierungs-Makro von ATL verwenden. Ich fand ein Beispiel, das dies tut (gegeben dstrDesc ist CSpDynamicString):

CSpDynamicString dstrDesc; 
SpGetDescription(voiceToken, &dstrDesc); 

USES_CONVERSION; 

printf("%s\n", W2T(dstrDesc)); 

jedoch nur das druckt das erste Zeichen des Voice-Namen!

Irgendwelche Ideen?

Antwort

2

CSpDynamicString implementiert einen Operator zum Konvertieren in und verwaltet auch den Zeiger LPWSTR intern. Also, W2T bekommt Sie LPTSTR Zeiger als printf Argument. Wenn Sie einen Unicode-Build haben, sind dies die Ergebnisse immer noch in einem WCHAR* Zeiger und printf("%s"... erwartet CHAR* Argument - das ist, wo Sie das Problem haben können, das Sie beschreiben.

es auf diese Weise versuchen:

CSpDynamicString dstrDesc; 
SpGetDescription(voiceToken, &dstrDesc); 
printf("%ls\n", (WCHAR*) dstrDesc); 
Verwandte Themen