日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

非MFC工程中使用MFC库

發布時間:2025/3/21 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 非MFC工程中使用MFC库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

需求說明

C++工程的類型有很多,從VS(或VC)可以看到常見的有:Win32 Console Application、MFC Application、Win32 Project等。在創建MFC工程時,通過IDE的向導會自動幫我們創建相應的類文件和包含必需的頭文件,但有時候我們需要在非MFC工程中包含MFC的庫。至于為什么會有這個需要,為何不在一開始就創建MFC工程呢?可能有兩種原因:1.在MFC工程會產生很多向導生成的代碼以及資源文件,如基于單文檔的工程會有View,Doc等類,很多時候我們并不需要這些東西,只需要一個空工程就可以了。2.使用第三方框架創建的工程,我們很難更改它的工程屬性(如用Firebreath開發瀏覽器插件,通過腳本文件firebreath會自動幫我們生成VS下的工程)。

常見問題

在非MFC工程中使用MFC的庫就需要包含相應的頭文件,經常會遇到下面這個問題:

  • fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]

  • fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include

  • 問題分析對于第1個問題,很簡單:選中工程名右鍵屬性(Project),在Properties\Configuration Properties\General\Use of MFC中選擇Use MFC in a Shared DLL 出現上面第2個問題主要是因為包含頭文件的順序不對。為什么包含WINDOWS.H的時候會有順序要求,網上有一段傳播的非常廣泛解釋:如果在MFC工程中#include <windows.h>,那么會有以下編譯錯誤(因為afxwin.h文件中包含了afx.h,afx.h文件中包含了afxver_.h,afxver_.h中包含了afxv_w32.h,而afxv_w32.h中包含了windows.h,請看以下分析):compile error: c:\program files\microsoft visual studio\vc98\mfc\include\afxv_w32.h(14) : fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h> 如果編譯器在編譯afxv_w32.h文件之前編譯了windows.h文件,編譯器會報上面的錯誤,因為在afxv_w32.h文件中有下面的一句預編譯報警: #ifdef _WINDOWS_ #error WINDOWS.H already included. MFC apps must not #include <windows.h> #endif 問題在于為什么afxv_w32.h中要有這么一句預編譯處理。看了afxv_w32.h和windows.h文件就有點明白了。 在afxv_w32.h中有下面的預編譯語句: ... ... #undef NOLOGERROR #undef NOPROFILER #undef NOMEMMGR #undef NOLFILEIO #undef NOOPENFILE #undef NORESOURCE #undef NOATOM ... ... 在afxv_w32.h中還有一句: #include "windows.h" 而在windows.h文件中有下面的預編譯語句: ... ... #define NOATOM #define NOGDI #define NOGDICAPMASKS #define NOMETAFILE #define NOMINMAX #define NOMSG #define NOOPENFILE ... ... 注意到在windows.h的開頭有防止windows.h被重復編譯的預編譯開關: #ifndef _WINDOWS_ #define _WINDOWS_ 這樣問題就明白了,雖然我不知道微軟為什么要這么做,但是我知道如果在afxv_w32.h沒有那句預編譯報警,那么如果在編譯afxv_w32.h之前 編譯了windows.h,那么在windows.h中#define的NOATOM等宏就會被#undef掉,可能會導致相應的錯誤發生。 猜想原因可能如上所述,我的解決方法是,將包含有#include “windows.h"的頭文件放在所有包含的頭文件的最后面,這樣使得對afxv_w32文件 的編譯處理發生在先,這樣,由于在afxv_w32.h中已經包含了windows.h,那么宏_WINDOWS_將被定義,后繼的#include "windows.h"語句將形同虛設, 上面的編譯報警也不會發生了。我覺得這種處理要比將所有的#include "windows.h”語句刪掉要好一點。 一句話,編譯器必須在編譯windows.h之前編譯afxv_w32.h,因為我不是十分清除什么時候afxv_w32.h會被編譯,所以我將可能包含有#include "windows.h"的頭文件放在其他頭文件之后#include。參考解決方法解決這個問題的總體思路是:把#include <afxwin.h>的包含語句把到最前面。sunshine1314 的博文《非MFC工程使用MFC庫時的問題及解決辦法》給出了一序列的解決方案,大家可能參考一下,也許能解決你們的問題。但我當時通過這一系列方法還是沒能解決我的問題。

    總結

    以上是生活随笔為你收集整理的非MFC工程中使用MFC库的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲视频1| 黑人爱爱视频 | 另类性姿势bbwbbw | 丝袜高跟av | 小镇姑娘国语版在线观看免费 | jizz成熟丰满日本少妇 | 禁漫天堂下载18 | 久久综合影院 | 熊猫成人网 | 欧美一级专区免费大片 | 秋霞午夜伦理 | 久久久夜色精品 | 日韩精品一区二区三区 | 国产chinasex对白videos麻豆 | 久久久免费av| 国产一区精品在线观看 | 亚洲熟女乱综合一区二区三区 | 狠狠天天| 精品国产乱码久久久久 | 日本高清二区 | 欧美国产一区二区三区 | 亚洲视频一二三 | 免费观看黄色的网站 | 亚洲二区在线观看 | 亚洲国产精品va在线 | 日韩欧美视频网站 | 色综合天天干 | 日韩成人久久 | 红猫大本营在线观看的 | 日韩精品在线免费视频 | 日韩3p| 四色网址| 亚洲777| 亚洲成年网站 | 在线成人 | 欧美亚洲一级 | 亚洲精品久久久久久无码色欲四季 | 黄色同人网站 | 91片黄在线观 | 天堂中文在线视频 | 欧美三级视频网站 | 神马午夜51 | 黄视频网站在线 | 熟女高潮一区二区三区 | 可以在线看黄的网站 | 久久综合狠狠综合久久综合88 | 日本欧美亚洲 | 亚洲欧美动漫 | 国产欧美一区二区精品久久久 | 天天毛片| 91成人免费观看 | 一本一道波多野结衣av黑人 | xxsm.com | 色婷婷九月 | 久久偷看各类女兵18女厕嘘嘘 | 男人猛吃奶女人爽视频 | 国产喷水福利在线视频 | 欧美色图网站 | 刘亦菲一区二区三区免费看 | 白浆在线 | 美女人人操 | av性天堂网 | 国产福利视频在线 | 久久午夜夜伦鲁鲁一区二区 | 成年黄色网 | 日韩丰满少妇无码内射 | 99日精品| 肉肉视频在线观看 | 欧美日韩综合网 | 老王66福利网 | 亚洲综合色成人 | 国产网友自拍 | 麻豆免费在线观看 | 亚洲欧美另类中文字幕 | 日日夜夜天天 | 老子影院午夜伦不卡大全 | 九色tv | 亚洲图片在线视频 | www精品一区二区三区 | 大桥未久在线视频 | 色成人综合网 | 麻豆成人在线视频 | 黄色一区二区三区 | 西西44rtwww国产精品 | 操综合| 国产美女明星三级做爰 | 天天综合影院 | 日韩欧美爱爱 | 久久久ww | 老女人性视频 | 欧美一级看片 | 免费看的av| 青青青在线观看视频 | 亚洲免费国产视频 | 欧美一区二区三区久久综合 | 国产av剧情一区二区三区 | jjzz日本女人 | 91麻豆精品国产 | 美女穴穴 |