1

Ich versuche, eine Sprache-zu-Text-Eingabe mit dem Windows.Media.SpeechRecognition Namensraum zu entwickeln, wie hier beschrieben sind in Qt zu arbeiten und es scheint, gibt es nicht so etwas wie einen Windows-Namensraum:den Windows.Media.Speechrecognition Namespace in einer Qt C++ Anwendung

using namespace Windows::Media::SpeechRecognition; 

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

    //... 

    return 0; 
} 

Ergebnisse in

C2653: "Windows" keine Klasse oder Namespace

Okay, also dachte ich mir, ich müsste etwas hinzufügen oder eine Bibliothek zu meiner Profildatei hinzufügen, aber ich kann nichts darüber finden, wo und wo ich es bekommen kann.

Falls die Frage auftaucht: Ich benutze das, weil ich die Spracheingabe brauche, um andere Sprachen als nur Englisch zu akzeptieren.

Antwort

3

Sie müssen Windows.Media.SpeechRecognition.h Header einfügen. In Desktop-Apps ist der Namespace tatsächlich ABI::Windows::Media::SpeechRecognition. Sie müssen WRL auch verwenden, um es aufzurufen. Sie können die SpeechRecognizer Objekt wie folgt erstellen:

#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(); 
} 

Sie werden auch mit RuntimeObject.lib verknüpfen müssen, damit Funktionen wie RoInitialize oder RoActivateInstance zu finden.