Ошибки генерируются при запуске SAPI в QT

Пожалуйста, посмотрите на следующий код

#include <sapi.h>

int main(int argc, char* argv[])
{
ISpVoice * pVoice = NULL;

if (FAILED(::CoInitialize(NULL)))
return FALSE;

HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice;);
if( SUCCEEDED( hr ) )
{
hr = pVoice->Speak(L"Hello world", 0, NULL);
pVoice->Release();
pVoice = NULL;
}

::CoUninitialize();
return TRUE;
}

Это мой самый первый запуск SAPI 5.1, и это пример приветственного мира, предоставленного MS.

Я добавил местоположение SAP «bin» в системную переменную «Path».

Ниже приводится мой проект QT (содержание .pro)

#-------------------------------------------------
#
# Project created by QtCreator 2013-04-26T12:59:05
#
#-------------------------------------------------

QT       += core

QT       -= gui

TARGET = Tired
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = appSOURCES += main.cpp \
ContentDetector.cpp \
Speech.cpp

INCLUDEPATH += C:/opencv/build/include
INCLUDEPATH += C:/opencv/build/include/opencv
INCLUDEPATH += "C:/Program Files/Java/jdk1.7.0/include"INCLUDEPATH += "C:/Program Files/Java/jdk1.7.0/include/win32"INCLUDEPATH += "C:/Program Files/Microsoft Speech SDK 5.1/Include"
LIBS += C:/opencv/build/x86/vc9/lib/opencv_calib3d240.lib
LIBS += C:/opencv/build/x86/vc9/lib/opencv_contrib240.lib
LIBS += C:/opencv/build/x86/vc9/lib/opencv_core240.lib
LIBS += C:/opencv/build/x86/vc9/lib/opencv_features2d240.lib
LIBS += C:/opencv/build/x86/vc9/lib/opencv_flann240.lib
LIBS += C:/opencv/build/x86/vc9/lib/opencv_highgui240.lib
LIBS += C:/opencv/build/x86/vc9/lib/opencv_imgproc240.lib
LIBS += C:/opencv/build/x86/vc9/lib/opencv_objdetect240.lib
LIBS += C:/opencv/build/x86/vc9/lib/opencv_video240.lib
LIBS += "C:/Program Files/Java/jdk1.7.0/lib/jvm.lib"LIBS += "C:/Program Files/Java/jdk1.7.0/lib/jawt.lib"LIBS += "C:/Program Files/Microsoft Speech SDK 5.1/Lib/i386/sapi.lib"

Обратите внимание, что SAPI включает в себя последнее включение, а SAPI lib является последней библиотекой.

Когда я запускаю этот код, генерируется следующая ошибка.

C:\Users\yohan\Documents\QTPeojects\Tired\Speech.cpp:10: error: C2143: syntax error : missing ')' before ';'
C:\Users\yohan\Documents\QTPeojects\Tired\Speech.cpp:10: error: C2059: syntax error : ')'

Я не понимаю почему. Пожалуйста помоги!

ОБНОВИТЬ

Вышеуказанная ошибка исчезла после выполнения инструкций Джона. Но теперь генерируются следующие ошибки. Это почему?

Speech.obj:-1: error: LNK2019: unresolved external symbol __imp__CoUninitialize@0 referenced in function _main

Speech.obj:-1: error: LNK2019: unresolved external symbol __imp__CoCreateInstance@20 referenced in function _main

Speech.obj:-1: error: LNK2019: unresolved external symbol __imp__CoInitialize@4 referenced in function _main

release\Tired.exe:-1: error: LNK1120: 3 unresolved externals

1

Решение

HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice;);

должно быть

HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);

В вашей версии есть лишняя точка с запятой.

1

Другие решения

недостающие функции находятся в user32.lib (но не знаю, как добавить это в свой QT Proj)

0

Ваши проблемы с компоновщиком связаны с тем, что вы неправильно ссылаетесь на библиотеки в файле Qt .pro.

Чтобы добавить библиотеку, вам нужно сделать что-то вроде этого: —

LIBS + = -LC: / opencv / build / x86 / vc9 / lib / -lopencv_calib3d240

Обратите внимание на -L перед путем и -l перед именем библиотеки.

0

Единственным способом было добавление ATL.

  #define _ATL_APARTMENT_THREADED

#include <atlbase.h>
//You may derive a class from CComModule and use it if you want to override something,
//but do not change the name of _Module
extern CComModule _Module;
#include <atlcom.h>

#include <sapi.h>
#include <iostream>

using namespace std;

int main(int argc, char* argv[])
{
cout << "Hello" << endl;
ISpVoice * pVoice = NULL;

if (FAILED(::CoInitialize(NULL)))
return FALSE;

HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
if( SUCCEEDED( hr ) )
{
cout << "Succeeded" << endl;
hr = pVoice->Speak(L"Hello world", 0, NULL);
pVoice->Release();
pVoice = NULL;
}
else
{
cout << "Not succeeded" << endl;
}

::CoUninitialize();
return TRUE;
}
0
По вопросам рекламы [email protected]