1

我正在编写一个使用 SAPI 5 的自定义文本转语音程序,我面临的一个问题是枚举声音SpEnumTokens并对其进行迭代会产生CSpDynamicString对象。

我的问题是,我如何转换CSpDynamicStringchar *这样我可以printf他们?

看起来我必须使用 ATL 中的某种文本转换宏。我找到了一个这样做的例子(给定dstrDesc的是CSpDynamicString):

CSpDynamicString dstrDesc;
SpGetDescription(voiceToken, &dstrDesc);

USES_CONVERSION;

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

然而,这只会打印语音名称的第一个字符!

有任何想法吗?

4

1 回答 1

3

CSpDynamicString实现一个操作符来转换WCHAR*并在LPWSTR内部管理指针。所以,W2T让你LPTSTR指针作为printf参数。如果你有一个 Unicode 版本,这仍然是一个WCHAR*指针和printf("%s"...期望CHAR*参数的结果 - 这是你可能遇到你所描述的问题的地方。

试试这种方式:

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