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

2021-04-26 21:04:38 字數 1358 閱讀 4030

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

最近正在寫乙個3ds max的模型匯入外掛程式,要求能夠將自定義格式的三維模型檔案匯入到max中進行編輯。max sdk提供了寫這種外掛程式的介面,可以在示例工程上直接進行修改,但這些工程都是標準c工程(未使用mfc)。非

mfc工程建立時是不支援mfc特性的,也就是說在這些工程中不能使用mfc庫中的類,如

cstring,carray等等;然而我們在處理實際問題時卻常常會有使用這些類的希望,因為很多時候它們可以使事情更加簡單化,例如,要從指定的目錄中搜尋滿足條件的檔案,用cfilefind類將會非常方便。可能有人會說,為何不在一開始就建立

mfc工程呢?問題在於mfc工程會產生很多嚮導生成**,如基於單文件的工程會有view,doc等類,很多時候我們只需要乙個空工程就可以了;而且,我們可能經常會在已有的工程上直接進行修改、再加工。

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

1、工程à設定中,將mfc的使用由原來的「no using mfc(不使用mfc)」改為「

use mfc in a shared dll(在共享dll中使用mfc)」

2、標頭檔案包含

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

常用的類,如cstring, cedit 等,包含afxwin.h就可以了,cfilefind需要包含afx.h,即#i nclude

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

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

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

另外還要注意的是,如果#i nclude語句是在乙個標頭檔案裡,那麼對應標頭檔案的包含也要寫在首行。示例如下:

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

test.h檔案的內容如下:

#include //保證該語句在首行

#include …

test.cpp的檔案內容如下:

#i nclude 「test.h」 //同樣也要保證該語句在首行

#include …

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

4. error lnk2005: _dllmain@12 already defined

只需要在工程設定裡面,把win32,ndebug,_windows,_mbcs,_usrdll,msgbox_exports,_windll,_afxdll

中的_usrdll,刪除,就可以正確編譯了

非MFC工程使用MFC庫小結

一般的非mfc工程可以在包含相關標頭檔案後 如afx.h 就可以使用裡面封裝的類了。1 afx.h中已經包含了windows.h標頭檔案,但是在非mfc工程中,也包含了了windows.h,因此會提示報錯。一般在stdafx.h中的windows.h注釋掉,然後寫上afx.h即可。2 部分巨集重複定...

非MFC工程中使用MFC庫

為何不在一開始就建立 mfc工程呢?可能有兩種原因 1.在mfc 工程會產生很多嚮導生成的 以及資源檔案,如基於單文件的工程會有 view,doc 等類,很多時候我們並不需要這些東西,只需要乙個空工程就可以了。2.使用第三方框架建立的工程,我們很難更改它的工程屬性 如用firebreath開發瀏覽器...

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

peter lee 2005.08.20 一 問題由來 vc6和 vc71 的工程嚮導中都包含非 mfc的工程,諸如 win32 console project,win32 static library 非mfc 工程建立時是不支援 mfc特性的,然後我們在處理實際問題時有時會用到 mfc相關類,如...