`
in355hz
  • 浏览: 228117 次
社区版块
存档分类
最新评论

在 Win32 Application 中使用 MFC

阅读更多

Virtual C++ 6.0 创建的 Win32 Application Win32 Console Application 中使用 MFC 是可能的,主要的困难在于绕过 MFC 提供的 WinMain 函数。下面我提供一个方法以供参考:

 

进入 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

 

3.  Project stdafx.h 中包含必要的头文件,或者直接从 MFC AppWizard 创建的 stdafx.h 中拷贝:

 

#define VC_EXTRALEAN            // Exclude rarely-used stuff from Windows headers

      

#include <afx.h>

#include <afxwin.h>         // MFC core and standard components

#include <afxext.h>         // MFC extensions

#include <afxdtctl.h>           // MFC support for Internet Explorer 4 Common Controls

#ifndef _AFX_NO_AFXCMN_SUPPORT

#include <afxcmn.h>                  // 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;

}

 

此外,在 Virtual C++ 6.0 创建的 Win32 Dynamic-Link Library 中也可以单独使用 MFC ,这样可以避免 Project MFC AppWizard ATL COM AppWizard 添加 CWinApp 实例,方法简单,如下构造 Project DllMain 函数即可:

 

#include <afxdllx.h>

 

static AFX_EXTENSION_MODULE ProjectDLL     = { NULL, NULL };

 

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.

}

 


注: 有网友指出 VC7 中, 需要将第一步的 _AFXDLL 改成 __PROF 则同样可以编译。

分享到:
评论

相关推荐

    Win32 控制台中使用 MFC.zip

    在Virtual C++ 6.0创建的Win32 Application 和 Win32 Console Application 中使用 MFC 是可能的,主要的困难在于绕过MFC提供的WinMain函数。下面我提供一个方法以供参考:

    win32和win32 console和MFC程序概况

    win32和win32 console和MFC程序概况,区别,从零开始c++,各种运行库

    在控制台中使用MFC.zip

    在Virtual C++ 6.0创建的Win32 Application 和 Win32 Console Application 中使用 MFC 是可能的,主要的困难在于绕过MFC提供的WinMain函数。下面我提供一个方法以供参考:

    在win32工程下做计算器

    MFC,而是在win32 application工程下做的带界 windows程序设计范畴。 系统需求分析 系统目标 另外还具有计算N阶阶乘的功能,此外还具 。 重要功能 开发环境 visual c++ 6.0编译,链接,运行。...

    vc2012中文版创建win32基于对话框应用程序向导

    根据http://www.cnblogs.com/hwangbae/archive/2012/07/26/2610469.html《自己动手让Visual Studio的Win32向导支持生成对话框程序》制作的vs2012中文版创建win32基于对话框的应用程序向导(上述该文章提供的是英文版...

    MFC.rar_win32

    这是一个Win32 Application。

    供新手使用的MFC

    -〉New(新建) 弹出一个对话框,我们选择win32 Application(win32应用程序),再工程文本框给它起一个名字MyMFC,点击确定。在确认信息的对话框里选择空工程an empty project点确定。这样我们就建了一个win32 应用...

    国外下载的Win32++类库(纯C++代码封装的windows SDK),附源码

    使用C++代码封装的win32操作类, 与MFC相似,对于学习SDK与C++是巨好的参考 Tutorials Menu of tutorials Tutorial 1: The Simplest Window Tutorial 2: Using Classes and Inheritance Tutorial 3: Using ...

    MFC调用win32窗口显示调试信息

    MFC调用win32窗口显示调试信息,使用AllocConsole 函数(2010-11-16 15:33:25)转载标签: 调试win32mfc杂谈 分类: 编译器 AllocConsole Function 为主调进程分配一个新的控制台。 语法 C++ : BOOL WINAPI ...

    MFC的程序框架剖析

    同理对于ID为ID_FILE_OPEN(在CWinApp::OnFileOpen()中响应)、ID_FILE_SAVE(在CDocument::OnFileSave()中响应)等等在MFC向导为我们生成的单文档类中找不到消息响应的入口时,其实都是在基类CWinApp或者CDocument...

    深入浅出MFC 第2版 简体中文文字

    此外MFC的部分类为MFC/ATL 通用,可以在Win32 应用程序中单独包含并使用这些类。 由于它的易用性,初学者常误认为VC++开发必须使用MFC。这种想法是错误的。作为Application Framework,MFC的使用只能提高某些情况下...

    基于MFC编写的五子棋程序

    用win32application编写的基于MFC的应用程序,左键为红方,右键为蓝方。

    MFC 微软基础类MFC,微软基础类(Microsoft Foundation

     此外MFC的部分类为MFC/ATL 通用,可以在Win32 应用程序中单独包含并使用这些类。  由于它的易用性,初学者常误认为VC++开发必须使用MFC。这种想法是错误的。作为Application Framework,MFC的使用只能提高某些...

    Software.Application.Development.A.Visual.Cplusplus.MFC.and.STL

    Appendix C: NodeArcConnectivity: Win32 Console Application Appendix D: Debugging: An Introduction Appendix E: MatrixInversion: Win32 Console Application Appendix F: Using DiagramEng

    The Win32 Foundation Classes (WFC) - Version 45

    Win32 Foundation Classes (WFC) is a library of C++ classes that extend Microsoft Foundation Classes (MFC) to do NT specific things. Microsoft has chosen to focus their efforts on making MFC do pretty ...

    MFCApplication1.rar_mfcapplication1_tai MFCApplication1_任务管理器

    任务管理器源码.有些地方用的现成的库,基本思想见代码,中间涉及驱动在win10 下可以正常运行。

    深入浅出MFC

    第1章 win32程序基本概念 第2章 c++的重要性质 第3章 mfc六大关键技术之仿真 第二篇 欲善工事先利其器 第4章 visual c++集成开发环境 第三篇 浅出mfc程序设计 第5章 总观application framework 第6章 ...

    侯捷 深入浅出MFC

    范例程序方面,第三章有数个Console程序(DOS-like 程序,在Windows系统的DOS Box 中执行),模拟并简化Application Framework 六大核心技术。另外,全书以一个循序渐进的Scribble 程序(Visual C++ 所附范例),从...

    深入浅出 MFC (第二版) 高清晰

    第一章 Win32 程序基本概念 第二章 C++的重要性质 第三章 MFC六大关键技术之仿真 第二篇 欲善工事先利其器 第四章 Visual C++ 集成开发环境 第三篇 浅出MFC程序设计 第五章 总观Application Framework 第六章 MFC...

    深入浅出MFC【侯捷】

    勿在浮砂筑高台 第1章 Win32程序基本概念 Win32程序开发流程 需要什么函数库(.LIB) 需要什么头文件(.H) 以消息为基础,以事件驱动之(message based,event driven) 一个具体而微的Win32程序 程序进入点WinMain...

Global site tag (gtag.js) - Google Analytics