1

Я пытаюсь разработать речи в ввода текста с пространством имен Windows.Media.SpeechRecognition, как описано здесь: https://msdn.microsoft.com/en-us/library/windows.media.speechrecognition.aspxИспользование пространства имен Windows.Media.Speechrecognition в Qt C++ приложения

Теперь я работаю в Qt и, по-видимому, нет такого понятия, как пространство имен с Windows:

using namespace Windows::Media::SpeechRecognition; 

int main(int argc, char *argv[]) 
{ 
    SpeechRecognizer speechRecognizer = new SpeechRecognizer(); 

    //... 

    return 0; 
} 

приводит

C2653: "Windows" не класс или пространство имен

Хорошо, поэтому я подумал, что, возможно, мне нужно включить что-то или добавить библиотеку в свой файл pro-file, но я не могу найти ничего о том, что и где его получить.

В случае возникновения вопроса: я использую это, потому что мне нужен речевой ввод, чтобы принимать языки, отличные от английского.

ответ

3

Вам необходимо включить заголовок 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.