在
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函数。下面我提供一个方法以供参考:
根据给定的部分内容,我们可以看到在Visual C++ 6.0中创建的Win32 Application和Win32 Console Application中使用MFC的具体步骤: 1. **预处理器定义**:为了绕过MFC提供的`WinMain`函数,我们需要在预处理器定义中...
在本文中,我们将深入探讨如何使用Microsoft Visual C++ 6.0(简称VC6.0)这个经典且功能强大的IDE来开发Win32应用程序。Win32 Application是Windows操作系统平台上的本地应用程序,它利用Windows API(应用程序接口...
在Windows平台上进行C++开发时,Microsoft...以上就是关于在VS2010的Win32项目中使用MFC模版的基本步骤和相关知识点。通过这个过程,你可以创建出具备MFC特性的应用程序,利用其丰富的类库和强大的功能,提高开发效率。
在标题"MFCApplication1.zip_MFC_MFCApplication1.exe_c++ mfc application_"中,我们可以推断这是一个基于C++语言,使用MFC框架构建的应用程序,其可执行文件名为"MFCApplication1.exe"。描述中的“通过C++和MFC...
Win32 API(Application Programming Interface)是微软Windows操作系统的核心组件,为开发者提供了与操作系统交互的接口。...在实际项目中,掌握Win32 API和MFC的应用,可以极大地提高开发效率和代码质量。
在这个场景中,我们将探讨如何使用Visual Studio 2010创建一个基于Win32的空项目,并逐步将其转化为一个MFC SDI程序。 首先,启动Visual Studio 2010,选择"文件" -> "新建" -> "项目"。在项目类型中,选择"Win32 ...
在Virtual C++ 6.0创建的Win32 Application 和 Win32 Console Application 中使用 MFC 是可能的,主要的困难在于绕过MFC提供的WinMain函数。下面我提供一个方法以供参考:
首先,Win32 API(Application Programming Interface)是微软为Windows操作系统提供的核心接口,开发者可以通过调用这些API函数来实现各种功能,如文件操作、进程与线程管理、内存分配、网络通信等。例如,`...
Win32 API(Application Programming Interface)是微软Windows操作系统的核心接口,它为开发者提供了与系统进行交互的函数调用。这些函数涵盖了操作系统的核心功能,包括窗口管理、图形绘制、内存管理、网络通信等...
在Visual Studio中,可以选择"Win32 Console Application"项目模板,然后在向导中选择"Dynamic Library (.dll)"作为项目类型。在DLL项目中,我们需要定义导出函数,这些函数将在调用DLL的应用程序中使用。导出函数...
在Win32应用程序开发中,MFC提供了一系列的类,如CWinApp、CWnd、CDialog、CButton等,这些类对应于Windows编程中的各种对象,如应用程序对象、窗口对象、对话框对象以及控件对象等。使用MFC可以大大简化对Windows...
综上所述,WIn32-MFC.zip中的资源全面地涵盖了Windows 32 API和MFC框架的核心知识。通过学习这些资料,开发者不仅可以深入理解Windows编程的底层原理,还能掌握使用MFC进行高效应用开发的技巧。无论是初学者还是经验...
MFC是Microsoft为Windows平台提供的C++类库,它简化了Win32 API的使用,使得开发者能够更高效地构建桌面应用程序。在MFC中,进度条控件是通过`CProgressCtrl`类实现的,它是Windows API中的`CreateProgressCtrl`函数...
本文将详细介绍如何在不同版本的Visual Studio(如VC6和VC2008)中安装和使用这个插件,以及如何手动创建一个Win32 Dialog-Based Application。 首先,让我们了解Win32 Dialog-Based Application的基本概念。对话框...
MFC(Microsoft Foundation Classes)是微软提供的一套C++类库,用于简化...而在某些特定场景下,直接使用Win32 API可以实现更底层、更高效的定制。因此,理解两者的结合使用,对提升Windows应用开发能力至关重要。
CSerialPort是MFC对Win32 API串口通信功能的封装,提供了诸如打开、关闭串口,设置波特率、数据位、停止位、校验位,以及发送和接收数据等方法。 首先,我们需要理解串口通信的基本概念。串口通信是一种异步通信...
在Win32 API中,我们可以使用send函数将构造好的HTTP请求字符串发送到服务器。接收服务器响应时,使用recv函数读取数据,注意处理好缓冲区大小和接收循环,确保接收完整个响应。 对于中文乱码问题,关键在于确保...
2. **添加MFC支持**:在项目属性中,选择“MFC”选项,选择“在静态库中使用MFC”或“在共享DLL中使用MFC”,根据需求决定是否需要将MFC库一起打包进DLL。 3. **编写函数**:在头文件中声明对外公开的函数和类,...