请看下面的代码
#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;
}我在用QT。当我运行这段代码时,我会得到错误。
无法打开包含文件:'atlbase.h':没有这样的文件或目录
我注意到我的机器中没有文件atlbase.h或atlcom.h。然而,这段代码在我的笔记本电脑中运行时没有错误,我在那里得到了这两个文件。
我正在考虑把这两个文件的副本放到我的台式计算机上,它能工作吗?如果是,我必须将它们复制到哪个文件夹?我对Windows编程、QT和speech都很陌生。
发布于 2013-05-06 18:05:25
对我来说,这些文件位于这里:
VS2010 - C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\include\atlbase.h
VS2008 - C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\atlmfc\include\atlbase.h请注意,ATL是的一部分(但不是速成版)。如果您需要ATL,请看这个主题How to add WTL and ATL to visual studio c++ express 2008。
我不认为抄袭atlbase.h和atlcom.h会对你有所帮助。您可以尝试获取所有atl*.h文件并安装所需的MicrosoftVisualC++可再发行包。
发布于 2013-05-06 18:45:34
这段代码不需要那些标头。删除extern CComModule _Module;和atl头。添加#include <windows.h>。
发布于 2013-05-06 17:41:49
拥有头当然是朝着正确的方向迈出的一步,但是您也需要库来编译(除非所有的东西都是在头中实现的)。您可以将标题放置在您喜欢的地方,只需确保链接器找到它们(要么在默认位置*,要么将路径作为标志)。
*我不知道Windows的默认位置。
https://stackoverflow.com/questions/16404092
复制相似问题