【问题标题】:Using the Windows.Media.Speechrecognition namespace in a Qt C++ application在 Qt C++ 应用程序中使用 Windows.Media.Speechrecognition 命名空间
【发布时间】:2016-06-27 12:42:57
【问题描述】:
我正在尝试使用 Windows.Media.SpeechRecognition 命名空间开发语音到文本输入,如下所述:https://msdn.microsoft.com/en-us/library/windows.media.speechrecognition.aspx
现在,我在 Qt 中工作,显然没有 Windows 命名空间之类的东西:
using namespace Windows::Media::SpeechRecognition;
int main(int argc, char *argv[])
{
SpeechRecognizer speechRecognizer = new SpeechRecognizer();
//...
return 0;
}
结果
C2653:“Windows”没有类或命名空间
好的,所以我想我可能需要在我的个人资料中包含一些内容或添加一个库,但我找不到任何关于获取它的内容和位置的信息。
如果出现问题:我正在使用它,因为我需要语音输入来接受除英语以外的其他语言。
【问题讨论】:
标签:
c++
qt
speech-recognition
speech-to-text
windows-api-code-pack
【解决方案1】:
您需要包含Windows.Media.SpeechRecognition.h 标头。在桌面应用程序中,命名空间实际上是ABI::Windows::Media::SpeechRecognition。您还需要使用 WRL 来调用它。您可以像这样创建SpeechRecognizer 对象:
#include <roapi.h>
#include <Windows.Media.SpeechRecognition.h>
#include <wrl.h>
using namespace ABI::Windows::Media::SpeechRecognition;
using namespace Microsoft::WRL;
using namespace Microsoft::WRL::Wrappers;
int main()
{
HRESULT hr = RoInitialize(RO_INIT_MULTITHREADED);
if (FAILED(hr))
return hr;
ComPtr<IInspectable> instance;
ComPtr<ISpeechRecognizer> recognizer;
hr = RoActivateInstance(HStringReference(L"Windows.Media.SpeechRecognition.SpeechRecognizer").Get(), &instance);
if (FAILED(hr))
return hr;
hr = instance.As(&recognizer);
if (FAILED(hr))
return hr;
// do stuff with recognizer
RoUninitialize();
}
您还需要与RuntimeObject.lib 链接才能找到RoInitialize 或RoActivateInstance 等函数。