第一次记录所学DLL

库的基本概念

首先第一次记录自己所学的东西,也是做一个记录吧,虽然很多都是整理别人的,哈哈!

首先我们要了解什么是库?

说到库重点当然是DLL动态库了。

在DOS时代,以前程序员把一些代码集放到一个独立的文件,并把这个文件叫做库文件。然后人家把这个库文件加入编译器,就能使用这个库文件的所有功能就不用去写一大堆代码,这让人很开心。这个被叫做静态库,但是人们很快的就发现一个问题这个静态库太耗内存空间了,比如说我只是一个美化界面集合的动态库里面一个美化按钮的功能,但是我却不得不导入整个这个静态库,把所有代码都加载到这个程序的内存地址,这使程序非常非常的臃肿。那有没有什么更好的办法呢?技术在进步,大概Windows系统出现时,人们发现了一种“链接库”的新技术,这时候就引出了DLL的概念。其本身与静态库没什么区别,都是写一些通用性代码写道独立文件中,但是在编译方面,定义好一个交换数据的接口,当应用程序想要用到的时候就把这个库文件导入内存,由应用程序去加载清除这个函数功能,这样就可以解决上面的问题并很好的实现共享。

DLL的优点

在这我总结了4点分别是代码模块化,代码重用,内存的有效使用,减少所占用的磁盘空间

  1. 代码模块化
    什么意思呢?大概就是在开发一个项目中,不可能是一个人开发的,是许许多多人合作的结果,那么多人合作是不是得分模块化开发,这时候某个人使用DLL去开发某一模块的功能,这样降低了模块与模块之间的耦合度,也增加了以后维修升级的简易程度。
  2. 代码重用
    这个好理解,比如说我设计好一个修饰界面的DLL或者封装好一个算法DLL,在这给EXE可以用,在另外的EXE也可以用。
    3.内存的有效使用
    这个不太好理解,大概是就是内存的有效使用是系统只需载入一次动态库,不同的程序可以得到内存中相同的动态库的副本,因此节省了很多内存。我还是看不懂系统怎么载入,怎么节省的内存?太难了。
  3. 减少所占用的磁盘空间;
    当应用程序使用动态链接时,多个应用程序可以共享磁盘上单个DLL副本。这个好理解,多个应用程序可动态加载同一个DLL。

DLL基本操作

首先对DLL的操作大概分为创建,导入,导出,加载,接口保护!

第一步创建
在这我用的vs2008,DLL的创建分三种,分别是非MFC规则DLL,MFC规则DLL,MFC扩展DLL,三者的区别还是在于能否用MFC编程吧,再者前面两个都能被由多种语言实现,并且可被符合DLL规范的语言调用。
创建的话在创建程序的时候选,我们先来看一下非MFC规则DLL,

创建
创建点下一步选DLL就行
下面我们来说一下他的人口函数,上传图片真麻烦啊!
BOOL APIENTRY DllMain( HMODULE hModule,(本身实例句柄对象)
DWORD ul_reason_for_call,(指当前DLL被调用原因)
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:(DLL被进程第一次调用,导致DllMain函数被调用,当以后被调用时,只会增加次数,不会再调用DllMain)
case DLL_THREAD_ATTACH:(进程创建线程,,调用DLL的DllMain,传这个参数)
case DLL_THREAD_DETACH:(进程中某个线程结束,调用DLL的DllMain,传这个参数)
case DLL_PROCESS_DETACH:(当DLL被进程解除映射,调用DllMain,并且第二个参数选这个)
break;
}
return TRUE;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值