MFC Dll封装了MFC的库类。是MFC运行时的必需吧。
win32是SDK。你说他们的区别嘛,其实就是MFC和SDK的区别
通常作MFC程序时,选用MFC DLL
MFC规则DLL,没有显性DLLMAIN
MFC DLL自己也分为两种,一种是常规DLL,一种是扩展DLL。
MFC常规DLL在DLL内部能够用MFC类的, 可是给外部的接口并不提供MFC类的支持,仍是提供Win32 DLL一样的接口,与Win32的差异在于,它的内部能够用MFC类
扩展DLL能够有C++的接口,它能够导出C++类给客户端。
导出的函数可使用C++/MFC数据类型作参数或返回值,导出一个类时客户端能建立类对象或者派生这个类。
同时,在DLL中也可使用MFC。
MFC DLL 和win32 DLL的差异就是一个使用MFC类库,一个不使用
若是你代码中用到的MFC,那么必定要建立MFC DLL,由于win32 DLL用不了MFC类
MFC扩展DLL是一般实现从现有Microsoft基础类库类派生的可重用类的DLL。
MFC扩展DLL具备下列功能和要求:
1 客户端可执行文件必须是用定义的_AFXDLL编译的MFC应用程序。
2 扩展DLL也可由动态连接到MFC的规则DLL使用。
3 扩展DLL应该用定义的_AFXEXT编译。这将强制同时定义_AFXDLL,并确保从MFC头文件中拉入正确的声明。它也确保了在生成DLL时将AFX_EXT_CLASS定义为__declspec(dllexport),这在使用此宏声明扩展DLL中的类时是必要的。
4 扩展DLL不该实例化从CWinApp派生的类,而应依赖客户端应用程序(或DLL)提供此对象。
5 但扩展DLL应提供DllMain函数,并在那里执行任何须需的初始化。
扩展DLL是使用MFC动态连接库版本(也称做共享MFC版本)生成的。只有用共享MFC版本生成的MFC可执行文件
(应用程序或规则DLL)才能使用扩展DLL。客户端应用程序和扩展DLL必须使用相同版本的MFCx0.dll。使用扩展DLL,能够从MFC派生新的自定义类,而后将此“扩展”版本的MFC提供给调用DLL的应用程序。
主要是资源的管理吧
mfc扩展dll会把当前dll的句柄加入一个全局资源句柄列表。而普通的dll则不会。即便支持mfc也不会。这样你每次用mfc类建立资源的时候要多写几行代码 。但你用在mfc扩展dll用win32来访问资源也须要多写代码。
MFC和SDK的区别
MFC DLL 使用了MFC 体积比较大,(好像只供MFC程序调用)
WIN32 DLL 是纯C++ API 写的,体积也比较小,能够供更多程序调用windows
/* 服务器
扩展DLL 能够导出类函数
扩展DLL服务器方的类定义:url
class AFX_CLASS_EXPORT 到出类名: public 基类名 spa
{ .net
............ 对象
} blog
扩展DLL客户方的类声明头文件:接口
#pragma comment(lib,"lib资源
文件名
")
class AFX_CLASS_IMPORT 到出类名: public 基类名
{
............
}
*/
/*
正规DLL 能够导出标准C语言函数
正规DLL服务器方的函数定义:
//
头文件中函数声明
extern "C" __declspec(dllexport)
返回值 函数名
(
形式参数声明
)
;
//源文件中函数实现
extern "C" __declspec(dllexport)
返回值 函数名
(
形式参数声明
)
{
AFX_MANAGE_STATE ( AfxGetStaticModuleState() );//
第一条语句
..............
}
//
在def模块文件中声明函数序号
EXPORTS 导出函数名 @序号数字
正规DLL客户方的隐式函数声明头文件: