2012-04-07 21 views
0

我正在寫一個使用SAPI 5的自定義文本到語音轉換程序,我面臨的一個問題是枚舉SpEnumTokens的聲音並遍歷它們會產生CSpDynamicString對象。如何使用ATL將CSpDynamicString轉換爲char *`?

我的問題是,我該如何將CSpDynamicString轉換爲char *以便我可以printf他們?

它看起來像我必須使用ATL的某種文本轉換宏。我發現,做一個這樣的例子(給出dstrDescCSpDynamicString):

CSpDynamicString dstrDesc; 
SpGetDescription(voiceToken, &dstrDesc); 

USES_CONVERSION; 

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

然而,這僅打印聲音名稱的第一個字!

任何想法?

回答

2

CSpDynamicString實現了一個運算符來轉換爲WCHAR*並且還在內部管理指針LPWSTR。所以,W2T會讓你指定LPTSTR指針作爲printf的參數。如果你有一個Unicode版本,這個結果仍然是WCHAR*指針,而printf("%s"...期望CHAR*的參數 - 這是你可以解決你所描述問題的地方。

試試這樣說:

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