如何使用 ATL 从 CSpDynamicString 转换为“char *”



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

我的问题是,如何将CSpDynamicString转换为char *以便我可以printf它们?

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

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);

最新更新