1

私は SAPI 5 を使用するカスタムのテキスト読み上げプログラムを作成しています。私が直面している問題の 1 つは、音声を列挙しSpEnumTokensて繰り返し処理するとCSpDynamicStringオブジェクトが生成されることです。

私の質問は、どうすれば変換CSpDynamicStringできるchar *printfでしょうか?

ATL の何らかのテキスト変換マクロを使用する必要があるようです。これを行う例を見つけました(与えられたのdstrDescCSpDynamicString):

CSpDynamicString dstrDesc;
SpGetDescription(voiceToken, &dstrDesc);

USES_CONVERSION;

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

ただし、これはボイス名の最初の文字のみを出力します!

何か案は?

4

1 に答える 1

3

CSpDynamicString変換する演算子を実装し、ポインタを内部WCHAR*で管理します。LPWSTRだから、引数としてあなたにポインタをW2T取得します。Unicodeビルドを使用している場合、これは依然としてポインターになり、引数を期待します。これは、説明している問題が発生する可能性がある場所です。LPTSTRprintfWCHAR*printf("%s"...CHAR*

この方法で試してください:

CSpDynamicString dstrDesc;
SpGetDescription(voiceToken, &dstrDesc);
printf("%ls\n", (WCHAR*) dstrDesc);
于 2012-04-09T04:54:53.730 に答える