Я пытаюсь разработать речевой ввод текста с пространством имен 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» нет класса или пространства имен
Итак, я подумал, что мне, возможно, придется что-то включить или добавить библиотеку в свой файл, но я не могу ничего найти о том, что и где взять.
В случае возникновения вопроса: я использую это, потому что мне нужен речевой ввод, чтобы принимать только языки, кроме английского.
Вы должны включить 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
,
Других решений пока нет …