在vs2003的Win32專案中使用 MFC

2021-09-05 15:47:11 字數 2480 閱讀 2430

進入 project-->setting--> c/c++ page,做以下修改:

1.    在preprocessor definitions中加入_afxdll,加入後的設定大概是這樣的:

win32,_debug / nodebug,[_console],[_mbcs],_afxdll

加入的_afxdll是關鍵 ,它欺騙mfc lib,避免連線 mfc 的 winmain 函式。

2. 修改project options,將 /mt或者 /ml標誌改為 /md。

原因是在 afxver_.h 中會檢查_afxdl, _mt, _dll 標誌是否同時設定,否則報錯。儘管鏈結 for multi-threaded 版本的 library 會損失一些效能,但是這個標誌的存在並不導致編譯器把 project 編譯成 dll。

#define vc_extralean            // exclude rarely-used stuff from windows headers

#include

#include // mfc core and standard components

#include // mfc extensions

#include // mfc support for internet explorer 4 common controls

#ifndef _afx_no_afxcmn_support

#include // mfc support for windows common controls

#endif // _afx_no_afxcmn_support

4.  在project的winmain / main中加入mfc的初始化**,以下是_twinmain和_tmain的情況:

extern "c" int winapi

_twinmain(hinstance hinstance, hinstance hprevinstance,

lptstr lpcmdline, int ncmdshow)

int nretcode = 0;

if (!afxwininit(::getmodulehandle(null), null, ::getcommandline(), 0))

trace0("fatal error: mfc initialization failed.\n");

nretcode = 1;

else

// actual winmain codes ...

afxwinterm();

return nretcode;

int _tmain(int argc, tchar* argv, tchar* envp)

int nretcode = 0;

if (!afxwininit(::getmodulehandle(null), null, ::getcommandline(), 0))

cerr << _t("fatal error: mfc initialization failed") << endl;

nretcode = 1;

else

// actual main codes ...

afxwinterm();

return nretcode;

#include

static afx_extension_module projectdll     = ;

extern "c" int apientry

dllmain(hinstance hinstance, dword dwreason, lpvoid lpreserved)

// remove this if you use lpreserved.

unreferenced_parameter(lpreserved);

if (dwreason == dll_process_attach)

// extension dll one-time initialization.

if (!afxinitextensionmodule(projectdll, hinstance))

trace0("project.dll initialize its extension module failed!\n");

return false;

// cdynlinklibrary』s destructor will be called in afxtermextensionmodule.

new cdynlinklibrary(projectdll);

else if (dwreason == dll_process_detach)

trace0("project.dll terminating...\n");

// terminate the library before destructors are called.

afxtermextensionmodule(projectdll);

return true;   // ok.

架設VS2003專案

哎呀,討厭搞vs2003版本開發的專案啊,稀奇古怪的東西一大堆。可憐的我又要去維護。第一步專案源 拷過來,到本機解壓開啟 sln 的解決方案先看下 找到http localhost 8888 technew tech.csproj 那本機先部署iis 埠8888 名稱 technew 這個隨意,之後...

建立乙個沒有視窗的WIN32專案

在windows程式設計中,我們不需要顯示視窗,也不想在工作列中顯示,但卻需要用到訊息迴圈,這時候我們就需要建立乙個不顯示視窗的win32程式。只需要將vs自動生成的框架中的 hwnd hwnd createwindoww cw usedefault,0,cw usedefault,0,nullpt...

VS建立空的Win32程式

在visual studio中直接新建空專案在 中加入windows入口點的 編譯會發生錯誤,但是新建windows桌面應用程式初始的 和資源太多,本文將給出建立空win32專案的方法 新建空專案 右鍵單擊解決方案下的工程 本例中為sample 點選屬性 r 在鏈結器中系統選項下的子系統設定為 視窗...