Win32动态链接库和MFC 动态链接库
来源:互联网 发布:python视频教程 知乎 编辑:程序博客网 时间:2024/05/17 06:31
通过使用 DLL,程序可以实现模块化,由相对独立的组件组成。例如,一个计帐程序可以按模块来销售。可以在运行时将各个模块加载到主程序中(如果安装了相应模块)。因为模块是彼此独立的,所以程序的加载速度更快,而且模块只在相应的功能被请求时才加载。
此外,可以更为容易地将更新应用于各个模块,而不会影响该程序的其他部分。例如,您可能具有一个工资计算程序,而税率每年都会更改。当这些更改被隔离到 DLL 中以后,您无需重新生成或安装整个程序就可以应用更新。
Windows操作系统中的一些作为 DLL 实现的文件
·ActiveX 控件 (.ocx) 文件
ActiveX控件的一个示例是日历控件,它使您可以从日历中选择日期。
·控制面板 (.cpl) 文件
.cpl 文件的一个示例是位于控制面板中的项。每个项都是一个专用 DLL。
·设备驱动程序(.drv) 文件
设备驱动程序的一个示例是控制打印到打印机的打印机驱动程序。
dll在程序中用 loadlibrary ,实际管理用rundll32.exe
Rundll32.exe与Rundll.exe的区别就在于前者是用于32位的链结库,后者是用于16位的链结库。rundll32.exe是专门用来调用dll文件的程序
当您在应用程序中加载 DLL 时,可以使用两种链接方法来调用导出的 DLL 函数。这两种链接方法是加载时动态链接和运行时动态链接。
运行时
在运行时动态链接中,应用程序调用 LoadLibrary 函数或 LoadLibraryEx 函数以在运行时加载 DLL。成功加载 DLL 后,可以使用 GetProcAddress 函数获得要调用的导出的 DLL
函数的地址。在使用运行时动态链接时,无需使用导入库文件。
Win32 DLL的特点
Win32 DLL与 Win16 DLL有很大的区别,这主要是由操作系统的设计思想决定的。一方面,在Win16 DLL中程序入口点函数和出口点函数(LibMain和WEP)是分别实现的;
而在Win32 DLL中却由同一函数DLLMain来实现。无论何时,当一个进程或线程载入和卸载DLL时,都要调用该函数,它的原型是
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason, LPVOID lpvReserved);
DLL:
Win32在任何程序中都可以使用的API库;
1、 规则DLL MFC扩展DLL (在一般DLL上扩展MFC库的DLL)
MFC扩展的DLL正确叫法是扩展MFC库的DLL ,MFC建工程会生成def模块定义文件,WIN32中建要手动建def文件也可以用_declspec声名。
#include <afxwin.h>#include <afxdllx.h>#ifdef _DEBUG#define new DEBUG_NEW#endifstatic AFX_EXTENSION_MODULE HJ89xAPIDLL = { NULL, NULL };extern "C" int APIENTRYDllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
2、 MFC规则的DLL (使用MFC时可以在共享的DLL中也可以使用静态的lib库)
这类DLL使用的是MFC规则,
MFC规则的类不是C++标准类,而是统一使用VC++类规则
有 来连接句柄
BEGIN_MESSAGE_MAP(CHJx89APIMApp, CWinApp)
END_MESSAGE_MAP()
这些宏定义被转换成C++代码,被编译器编译
MFC规则的DLL是MFC规则给外部暴露的接口都是Cwinapp ,MFC应用都是
- MFC动态链接库和WIN32动态链接库
- MFC动态链接库和WIN32动态链接库
- MFC动态链接库和WIN32动态链接库
- MFC动态链接库和WIN32动态链接库
- MFC动态链接库和WIN32动态链接库
- Win32动态链接库和MFC 动态链接库
- MFC动态链接库和WIN32动态链接库 及区别
- MFC 动态链接库
- mfc动态链接库
- MFC:动态链接库
- MFC动态链接库
- MFC动态链接库
- 动态链接库全面浅析(一)-----Win32 动态链接库
- 动态链接库全面浅析(一)-----Win32 动态链接库
- 动态链接和动态链接库
- MFC使用动态链接库
- 动态链接库(Win32 DLL的创建和使用)
- WIN32汇编: 17.动态链接库
- 优化三要素 助力新站快速收录
- SubmitetoHermes.ksh
- 视频、音频打时间戳的方法
- js访问jsf的SelectOneRadio组件方式
- hive 数据倾斜总结
- Win32动态链接库和MFC 动态链接库
- Android中merge和include标签的使用
- weka连接mysql数据库
- c++学习之模板
- Camera笔记
- hibernate配置文件hibernate.cfg.xml的详细解释
- html是不是一种编程语言
- JS弹出层 带遮罩与不带遮罩easyDialog v2.0
- MySQL数据库运维的五大指标