使用QT进行语音识别,将CComPtr <ISpRecognizer> m_cpRecognizer等变量放到头文件中,编译会出现atlbase.(3210): Parse error at "__identifier"。放到cpp文件中则不会有任何编译错误,但是在执行SetRuleState或SetGrammarState这个时,出现com异常,没办法,只能先用VS先测试一下。
同样的代码在VS上执行正确,但是QT上执行就出问题。QT使用的是VS的编译器,理论上相同代码编译结果应该相同,两者最大的区别是应该VS里面的宏定义QT里面没有。查看VS里面的宏定义,加上 DEFINES += _ATL_NATIVE_INITIALIZATION各种异常现象消失。
总结,QT使用microsoft speech工程文件需要以下宏定义:
win32: QMAKE_CXXFLAGS_RELEASE -= -Zc:strictStrings
win32: QMAKE_CFLAGS_RELEASE -= -Zc:strictStrings
win32: QMAKE_CFLAGS -= -Zc:strictStrings
win32: QMAKE_CXXFLAGS -= -Zc:strictStrings
DEFINES += QT_DEPRECATED_WARNINGS
DEFINES += _ATL_NATIVE_INITIALIZATION