请查看以下代码
#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和演讲的新手。
请帮忙!
答案 0 :(得分:12)
对我来说,这些文件位于:
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是Microsoft Visual Studio的一部分(但不是Express Edition的一部分)。 如果您需要获得快递ATL,请查看此主题How to add WTL and ATL to visual studio c++ express 2008
我认为复制atlbase.h
和atlcom.h
不会对您有所帮助。
您可能尝试获取所有atl * .h文件并安装所需的Microsoft Visual C ++ Redistributable软件包。
答案 1 :(得分:6)
您不需要该代码的标头。删除extern CComModule _Module;
和atl标头。添加#include <windows.h>
。
答案 2 :(得分:1)
拥有标题肯定是朝着正确方向迈出的一步,但您还需要这些库才能进行编译(除非所有内容都在头文件中实现)。您可以将标题放在您喜欢的位置,只需确保链接器找到它们(在默认位置*或将路径包含为标志)。
*我不知道Windows的默认位置。
答案 3 :(得分:1)
我安装了VS 2015 Express,它表示它是VS 2017社区运行时,并且使用非常简单的c ++程序来解决这个altbase.h问题。您可以着手获取确切的包含文件,也可以退后一步来解决此问题。 Microsoft是一家大型,彻底的公司,当他们为您提供c ++编译器时,他们会为您提供所需的库。当我解决这个问题时,我
然后当我添加我的代码时,生成的stdafx.h默认包含头文件并没有像之前那样导致这个altbase.h问题。我能够添加其他包含并执行“using namespace std;”我能够做cout和cin的。我的基本操作系统是Windows 7 Home Premium。显然,当你安装VS 2015/2017 Express时,你必须选择安装的c ++复选框。
答案 4 :(得分:0)
ATL和MFC附带零售版VC ++。无论你在哪里放置包含和库(atl * .lib)都需要。只需在IDE中为它们提供正确的路径。