WINDOWS.H already included. MFC apps must not #include

VC的Atl工程爲我們提供了很好的創建COM工程的方法,可是想要在Atl工程裏面使用MFC裏的對象(如CString,CFile)卻並不容易,這對於那些原本熟悉MFC類庫的程序員來說實在是一個很大的麻煩.這裏就介紹一下如何在Atl中使用mfc類庫:
      Atl的工程包括三種類型,ActiveDll, ActiveExe以及Service。 對於ActiveDll工程,只需要在建立工程的時候選擇MFC support,就可以了。對於ActiveExe和Service工程,就沒有那麼簡單了。我每次在工程中加入MFC的頭文件(如afx.h),都會出現如下的錯誤:
fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h>
出現這樣的錯誤是因爲頭文件定義中有如下語句:
#ifdef _WINDOWS_
#error WINDOWS.H already included. MFC apps must not #include <windows.h>
#endif
問題就出在atlbase和afx這兩個頭文件上,afx頭文件會引用afxv_w32.h這個文件。它會檢查當前頭文件中是否已經引用了windows.h,如果引用了就直接報錯。通常出現這種情況,我們只需要略過重複的引用和定義即可,爲什麼在這裏強制定義這種情況爲異常,其用意實在無法猜測。不過還在我們可以繞過這種情況,其方法就是將對afx.h的引用放在對atlbase文件的引用之前。上述的錯誤斷言就不會出現了,不過到此還沒有完全解決,我們還需要在工程設置的General項中將“Not using MFC”改爲另外兩種之一。這樣我們就能直接在Atl的工程中使用MFC中定義的類了。
    目前編譯和運行都基本可以了,不過還是不清楚爲什麼有如此嚴格的錯誤申明在這裏,可能還是另有玄機的,如果有哪位在使用中出現了問題,請告訴我,多謝!!!
發佈了12 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章