3个最重要的DLL:
Kernel32.dll:包含用于管理内存,进程和线程的各个函数;
User32.dll:包含执行用户界面任务的各个函数;
GDI32.dll:用于图形和显示文本的各个函数;
----------------------------------
DLL使用时存在问题:应用程序在销售时,附带的DLL文件,应该尽量少一些,因为:比如有100DLL,这样,应用程序的初始化时间会长得吓人,因为系统必须打开100个磁盘文件,程序才能执行它的操作。
----------------------------------
DLL有助于节省内存,如果有两个或多个应用程序使用同一个DLL,那么该DLL的页面只需要放入RAM(内存)一次(如:C++运行库);如果所有的应用程序都链接到这个“静态库static Library”,某些函数代码要多次存于内存中,但是,如果所有这些应用程序链接到DLL C/C++ RUNTIME Library,那些函数的代码就只需要放入内存一次。
----------------------------------
静态加载 and 动态加载:
应用程序要调用DLL中的函数之前,DLL文件必须要映射到进程地址空间中,2种方法:
1.加载时隐含链接:静态加载
2.运行期的显示链:runtime library(动态加载)
----------------------------------
EXE程序不一定能释放DLL函数所分配的内存空间
可以释放: EXE和DLL都链接到DLL的C/C++ runtime library
不能释放: 其中一个或两个DLL都链接到static library
----------------------------------
static link library: 无需加载,lib包含实际代码,link时合并进用户程序,.lib(用户需要的二进制文件)
dynamic link library: static load,启动时候隐式加入,lib包含接口定义,代码独立为.dll, .lib .dll,静态加载也就是dll的隐式加载是在应用程序启动之前就已经加载完的!
dynamic link library:dynamic link library使用时通过系统函数显示载入,.lib接口定义,代码独立为.dll, .dll .lib,显式加载是在运行期加载的!
----------------------------------
如果不使用动态加载DLL的话,可以使用静态加载,不过,这需要事先得到LIB文件和.H文件,如果这三个文件都有的话,那就可以很方便的加载DLL了,方法如下:
如何加载DLL
1(配置头文件路径):选择项目->属性->C/C++-》常规-》附加包含目录:设置引用头文件路径
2(配置DLL和Lib文件路径):选择项目->属性->连接器-》常规-》附加库目录:设置DLL路径
3(加载Lib文件):选择项目->属性->连接器-》输入-》附加依赖项:输入要加载的Lib文件名(加载多个Lib文件时,以回车为分隔符)
4(该主应用程序.exe的生成目录,和要加载的DLL、Lib放在同一目录):选择项目->属性->连接器-》常规-》输出文件
-----------------------------------
lib有两种,一种是内部有代码的,这种长度较长,比如C++运行库,它就没有DLL,直接提供LIB文件件,还有一种是生成DLL时附带生成的LIB,它内部不含代码,仅是为链接工作所做的。没有用,因为内部不含代码,你一定要用DLL,如果你不想DLL被别人用,可以将DLL作为一个资源放入EXE文件中。
阅读(951) | 评论(4) | 转发(0) |