无法打开包含文件:'atlbase.h':没有那个文件或目录。

21
请查看以下代码。
#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.hatlcom.h这两个文件。然而,在我的笔记本电脑上这段代码可以无错误运行,并且我在那里得到了这两个文件。

我考虑将这两个文件复制到我的台式电脑上,这样可行吗?如果是,我应该将它们复制到哪个文件夹中?我对Windows编程、QT和语音都很陌生。


在你的笔记本电脑上找到它们的同一目录是一个不错的选择 :) - Hans Passant
那就是问题所在。目录是VS 2010专业版。我想我只有1个许可证。 - PeakGen
2
请参见:https://dev59.com/12865IYBdhLWcg3wR8ah - Richard Walters
3
VS有非常自由的许可证,只要它们不被同时使用,您就可以在拥有的任何机器上部署它。 显然,您会想利用这一点,与Express版本打交道只是浪费时间。 - Hans Passant
5个回答

19

对我而言,这些文件位于这里:

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版本)。 如果您需要在Express中获得ATL,请参考此主题 How to add WTL and ATL to visual studio c++ express 2008
我认为复制atlbase.hatlcom.h是没有帮助的。 您可以尝试获取所有的atl*.h文件并安装所需的Microsoft Visual C++ Redistributable软件包。

这对我很有帮助:https://dev59.com/12865IYBdhLWcg3wR8ah#46304843 - Rainer

7

您不需要那些头文件来运行这段代码。请移除extern CComModule _Module;和 Atl 头文件,然后添加 #include <windows.h>


不幸的是,它出现了许多未解决的符号错误和找不到main.obj文件的错误。 - PeakGen
2
我向你保证,这个应用程序不需要ATL,它是一个纯粹的COM应用程序。你的项目设置或环境肯定出了些问题。 - john
谢谢您的回复。您是在使用MinGW Qt还是VS2010编译器QT呢?我正在使用使用VS 2010编译器的那个。请帮帮我!这是我的毕业项目!!!!! - PeakGen
我正在使用VS2010 Express。 - john
1
非常感谢您的回答。我开始一个项目使用的是VS2013,它的安装包含atlstr.h文件,但我已经转移到了更新的VS版本。之前只是为了获取这个文件才在安装VS2013,而现在看到了您的答案。 - Hong
@John,感谢你的回答!但是我遇到了错误: C:\Program Files (x86)\Microsoft Speech SDK 5.1\Include\sphelper.h:53: error: atlbase.h: No such file or directory #include <atlbase.h> ^ - Marat Gareev

1
拥有头文件无疑是朝着正确方向迈出的一步,但为了编译,您还需要库(除非所有内容都在头文件中实现)。您可以将头文件放在任何位置,只需确保链接器找到它们(可以在默认位置*中找到,也可以通过包含路径作为标志来找到)。
*我不知道Windows的默认位置。

1

ATL和MFC是VC++的零售版本附带的。无论您将包含文件和所需的库(atl*.lib)放在哪里都没有关系。只需在IDE中提供正确的路径即可。


1
我安装了VS 2015 Express,但运行时它显示为VS 2017 Community,并且在使用非常简单的C++程序时出现了altbase.h问题。你可以专注于获取确切的包含文件,也可以退一步解决此问题。微软是一家庞大而彻底的公司,当他们提供给您C++编译器时,会同时提供所需的库。解决这个问题后,我:
  1. 以管理员身份启动Visual Studio。
  2. 创建了一个Win32 C++控制台应用程序。
  3. 在C++项目创建向导中没有勾选“空项目”。
  4. 没有勾选ATL和MFC的公共头文件。
然后,当我添加我的代码时,生成的stdafx.h默认包含的头文件不再像之前那样引起altbase.h问题。我能够添加其他包含并使用“using namespace std;”,并且能够进行cout和cin操作。我的基本操作系统是Windows 7 Home Premium。显然,在安装VS 2015/2017 Express时,您必须选择C++复选框。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接