在
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 则同样可以编译。
分享到:
相关推荐
在Virtual C++ 6.0创建的Win32 Application 和 Win32 Console Application 中使用 MFC 是可能的,主要的困难在于绕过MFC提供的WinMain函数。下面我提供一个方法以供参考:
win32和win32 console和MFC程序概况,区别,从零开始c++,各种运行库
在Virtual C++ 6.0创建的Win32 Application 和 Win32 Console Application 中使用 MFC 是可能的,主要的困难在于绕过MFC提供的WinMain函数。下面我提供一个方法以供参考:
MFC,而是在win32 application工程下做的带界 windows程序设计范畴。 系统需求分析 系统目标 另外还具有计算N阶阶乘的功能,此外还具 。 重要功能 开发环境 visual c++ 6.0编译,链接,运行。...
根据http://www.cnblogs.com/hwangbae/archive/2012/07/26/2610469.html《自己动手让Visual Studio的Win32向导支持生成对话框程序》制作的vs2012中文版创建win32基于对话框的应用程序向导(上述该文章提供的是英文版...
这是一个Win32 Application。
-〉New(新建) 弹出一个对话框,我们选择win32 Application(win32应用程序),再工程文本框给它起一个名字MyMFC,点击确定。在确认信息的对话框里选择空工程an empty project点确定。这样我们就建了一个win32 应用...
使用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窗口显示调试信息,使用AllocConsole 函数(2010-11-16 15:33:25)转载标签: 调试win32mfc杂谈 分类: 编译器 AllocConsole Function 为主调进程分配一个新的控制台。 语法 C++ : BOOL WINAPI ...
同理对于ID为ID_FILE_OPEN(在CWinApp::OnFileOpen()中响应)、ID_FILE_SAVE(在CDocument::OnFileSave()中响应)等等在MFC向导为我们生成的单文档类中找不到消息响应的入口时,其实都是在基类CWinApp或者CDocument...
此外MFC的部分类为MFC/ATL 通用,可以在Win32 应用程序中单独包含并使用这些类。 由于它的易用性,初学者常误认为VC++开发必须使用MFC。这种想法是错误的。作为Application Framework,MFC的使用只能提高某些情况下...
用win32application编写的基于MFC的应用程序,左键为红方,右键为蓝方。
此外MFC的部分类为MFC/ATL 通用,可以在Win32 应用程序中单独包含并使用这些类。 由于它的易用性,初学者常误认为VC++开发必须使用MFC。这种想法是错误的。作为Application Framework,MFC的使用只能提高某些...
Appendix C: NodeArcConnectivity: Win32 Console Application Appendix D: Debugging: An Introduction Appendix E: MatrixInversion: Win32 Console Application Appendix F: Using DiagramEng
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 ...
任务管理器源码.有些地方用的现成的库,基本思想见代码,中间涉及驱动在win10 下可以正常运行。
第1章 win32程序基本概念 第2章 c++的重要性质 第3章 mfc六大关键技术之仿真 第二篇 欲善工事先利其器 第4章 visual c++集成开发环境 第三篇 浅出mfc程序设计 第5章 总观application framework 第6章 ...
范例程序方面,第三章有数个Console程序(DOS-like 程序,在Windows系统的DOS Box 中执行),模拟并简化Application Framework 六大核心技术。另外,全书以一个循序渐进的Scribble 程序(Visual C++ 所附范例),从...
第一章 Win32 程序基本概念 第二章 C++的重要性质 第三章 MFC六大关键技术之仿真 第二篇 欲善工事先利其器 第四章 Visual C++ 集成开发环境 第三篇 浅出MFC程序设计 第五章 总观Application Framework 第六章 MFC...
勿在浮砂筑高台 第1章 Win32程序基本概念 Win32程序开发流程 需要什么函数库(.LIB) 需要什么头文件(.H) 以消息为基础,以事件驱动之(message based,event driven) 一个具体而微的Win32程序 程序进入点WinMain...