我正在编写一个使用 SAPI 5 的自定义文本到语音转换程序,我面临的一个问题是使用 SpEnumTokens
枚举语音并迭代它们会产生CSpDynamicString
对象。
我的问题是,如何将CSpDynamicString
转换为char *
以便我可以printf
它们?
看起来我必须使用来自 ATL 的某种文本转换宏。我找到了一个这样做的例子(给定dstrDesc
是CSpDynamicString
):
CSpDynamicString dstrDesc;
SpGetDescription(voiceToken, &dstrDesc);
USES_CONVERSION;
printf("%sn", W2T(dstrDesc));
但是,这只会打印语音名称的第一个字符!
有什么想法吗?
CSpDynamicString
实现一个运算符以转换为WCHAR*
,并在内部管理LPWSTR
指针。因此,W2T
让你LPTSTR
指针作为printf
参数。如果你有一个 Unicode 构建,这仍然是一个WCHAR*
指针的结果,printf("%s"...
期望CHAR*
参数 - 这是你可以遇到你所描述的问题的地方。
试试这样:
CSpDynamicString dstrDesc;
SpGetDescription(voiceToken, &dstrDesc);
printf("%lsn", (WCHAR*) dstrDesc);