非MFC工程使用MFC庫時的問題及解決辦法

來源:互聯網
上載者:User

非MFC工程使用MFC庫時的問題及解決辦法

Peter Lee 2005.08.20

一、問題由來

 

vc6和vc71的工程嚮導中都包含非MFC的工程,諸如win32 console project, win32 static library。非MFC工程建立時是不支援MFC特性的,然後我們在處理實際問題時有時會用到MFC相關類,如Cstring, Cedit等等,這是很正常的。可能有人會說,為何不在一開始就建立MFC工程呢?問題在於MFC工程會產生很多嚮導產生代碼,如基於單文檔的工程會有View,Doc等類,很多時候我們只需要一個空工程就可以了。

 

 

二、常見問題

非MFC工程使用MFC庫時最常見的問題就是windows.h重複包含錯誤,具體如下:

fatal error C1189: #error :  WINDOWS.H already included.  MFC apps must not #include <windows.h>

 

 

三、解決辦法

非MFC工程使用MFC庫時,可參考以下步驟

1、工程設定中,將MFC的使用由原來的“使用標準windows庫”改為“在共用DLL中使用MFC”(VC71)

如果是英文版,相關選項是:

Microsoft Foundation Classes: Use MFC in a shared dll, no using MFC(VC6)

NOTE:因為我用的是中文版的vc71,英文版的vc6.

2、標頭檔包含

不同的MFC類需包含的標頭檔是不一樣的。

常用的類,如Cstring, Cedit 等,包含afxwin.h就可以了

如果不清楚包含什麼標頭檔的話,可以同msdn進行查詢,msdn中,對於MFC類的介紹中,都會給出相應的header file requirement.

3、#include 語句一定要寫在首行

這一點很重要,通常出現前面講到的windows.h重複包含錯誤,都是因為#include 語句沒有寫在首行。

另外還要注意的是,如果#include語句是在一個標頭檔裡,那麼對應標頭檔的包含也要寫在首行。樣本如下:

=============

test.h檔案的內容如下:

#include <afxwin.h> //保證該語句在首行

test.cpp的檔案內容如下:

#include “test.h” //同樣也要保證該語句在首行

=============

ps: 這麼做的具體原因我也不知道,我是在實際調試中琢磨出這個道理的。我自己在這個問題上花了很多冤枉時間,寫下該篇,就是希望大家不要在這個問題上絆腳。

 

 

 

 

 

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.