2013-05-06 2670 views
7

請看看下面的代碼無法打開包含文件:「atlbase.h」:沒有這樣的文件或目錄

#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。當我運行這段代碼,我得到的錯誤

Cannot open include file: 'atlbase.h': No such file or directory

我注意到,我沒有這些文件在我的機器atlbase.hatlcom.h。但是,這段代碼在我的筆記本電腦上運行時沒有出現錯誤,我在那裏找到了那兩個文件

我正在考慮將這兩個文件的副本放到我的臺式計算機上,它會起作用嗎?如果是,我必須複製到哪個文件夾?請注意我是Windows編程,QT和演講的新手。

請幫忙!

+0

您在筆記本電腦上找到的目錄是相同的目錄:) – 2013-05-06 17:58:22

+0

那就是問題所在。目錄是VS 2010專業版。我猜我有1個許可證。 – 2013-05-06 18:06:30

+0

參見:http://stackoverflow.com/questions/3898287/c-include-atlbase-h-is-not-found – 2013-05-06 18:07:51

回答

10

對我來說,這些文件都位於這裏:

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是微軟的Visual Studio(但不屬於快速版)的一部分。 如果你需要得到ATL的快遞,請看一看這個話題How to add WTL and ATL to visual studio c++ express 2008

我不認爲抄襲atlbase.hatlcom.h會幫助你。 您可能會嘗試獲取所有atl * .h文件並安裝所需的Microsoft Visual C++可再發行組件包。

+0

感謝您的幫助:) – 2013-05-08 05:53:36

1

擁有標頭肯定是朝着正確方向邁出的一步,但您還需要庫來編譯(除非所有內容都在頭文件中實現)。你可以將標題放在你喜歡的地方,只要確保鏈接器找到它們(或者在默認位置*或者將路徑作爲標記)。

*我不知道Windows的默認位置。

+0

感謝您的回覆。 +1從我:) – 2013-05-08 05:53:51

0

ATL和MFC附帶零售版本的VC++。無論您需要放置包含庫還是庫(atl * .lib),都無關緊要。只需在IDE中爲他們提供正確的路徑。

6

您不需要那些代碼的標題。刪除extern CComModule _Module;和atl標題。添加#include <windows.h>

+0

不幸的是,它出來了很多未解決的符號錯誤和main.obj不是Forund錯誤 – 2013-05-07 04:24:33

+2

我答應你,你不需要ATL這個應用程序,它是一個直接的COM應用程序。您的項目設置或環境必須以某種方式錯誤。 – john 2013-05-07 05:43:48

+0

感謝您的回覆。你使用MinGW QT還是VS2010編譯器QT?我使用的是使用VS 2010編譯器的那個。請幫忙!這是我最後一年的項目!!!!!!!! – 2013-05-07 06:35:57

1

我安裝了VS 2015 Express,它說它是VS 2017社區,當它運行時,並且使用非常簡單的C++程序出現了這個altbase.h問題。您可以着眼於獲取確切的包含文件,或者您可以退後一步來解決此問題。微軟是一個大而全面的公司,當他們給你C++編譯器時,他們會給你所需的庫。當我解決這個問題時我

  1. 以管理員身份啓動Visual Studio。
  2. 創建了一個Win32 C++控制檯應用程序
  3. 未檢查C++項目創建嚮導上的「空項目」。
  4. 未檢查ATL和MFC的通用頭文件。

然後,當我添加我的代碼時,生成的stdafx.h默認包含的頭文件不會像以前那樣引起此altbase.h問題。我能夠添加其他包含並做了一個「使用名稱空間標準;」我能做cout和cin的。我的基本操作系統是Windows 7家庭高級版。顯然,當您安裝VS 2015/2017 Express時,您必須選擇安裝的C++複選框。

相關問題