【问题标题】:How do I convert from CSpDynamicString to `char *` with ATL?如何使用 ATL 从 CSpDynamicString 转换为 `char *`?
【发布时间】:2012-04-20 18:49:39
【问题描述】:

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

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

看来我必须使用 ATL 中的某种文本转换宏。我找到了一个例子(假设dstrDescCSpDynamicString):

CSpDynamicString dstrDesc;
SpGetDescription(voiceToken, &dstrDesc);

USES_CONVERSION;

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

但是这只会打印语音名称的第一个字符!

有什么想法吗?

【问题讨论】:

    标签: atl text-to-speech sapi


    【解决方案1】:

    CSpDynamicString 实现了一个运算符来转换为WCHAR* 并且还在内部管理LPWSTR 指针。因此,W2T 将您的 LPTSTR 指针作为 printf 参数。如果你有一个 Unicode 版本,这仍然是一个 WCHAR* 指针和 printf("%s"... 需要 CHAR* 参数的结果 - 这就是你所描述的问题。

    试试这个方法:

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

    【讨论】:

      猜你喜欢
      • 2014-05-19
      • 1970-01-01
      • 2015-03-18
      • 2012-06-06
      • 2017-03-21
      • 2014-11-04
      • 2011-01-05
      • 1970-01-01
      • 2011-09-07
      相关资源
      最近更新 更多