《dll编写教程转载》word版

《dll编写教程转载》word版

ID:30364682

大小:85.66 KB

页数:16页

时间:2018-12-29

《dll编写教程转载》word版_第1页
《dll编写教程转载》word版_第2页
《dll编写教程转载》word版_第3页
《dll编写教程转载》word版_第4页
《dll编写教程转载》word版_第5页
资源描述:

《《dll编写教程转载》word版》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、DLL编写教程转载DLL编写教程(转载)2010年12月30日星期四13:08DLL编写教程半年不能上网,最近网络终于通了,终于可以更新博客了,写点什么呢?决定最近写一个编程技术系列,其内容是一些通用的编程技术。例如DLL,COM,Socket,多线程等等。这些技术的特点就是使用广泛,但是误解很多;网上教程很多,但是几乎没有什么优质良品。我以近几个月来的编程经验发现,很有必要好好的总结一下这些编程技术了。一来对自己是总结提高,二来可以方便光顾我博客的朋友。好了,废话少说,言归正传。第一篇就是《DLL编写教程》,为什么起这么土的名字呢?为什么不叫《轻轻松松写

2、DLL》或者《DLL一日通》呢?或者更nb的《深入简出DLL》呢?呵呵,常常上网搜索资料的弟兄自然知道。本文对通用的DLL技术做了一个总结,并提供了源代码打包下载,下载地址为:DLL的优点简单的说,dll有以下几个优点:1)节省内存。同一个软件模块,若是以源代码的形式重用,则会被编译到不同的可执行程序中,同时运行这些exe时这些模块的二进制码会被重复加载到内存中。如果使用dll,则只在内存中加载一次,所有使用该dll的进程会共享此块内存(当然,像dll中的全局变量这种东西是会被每个进程复制一份的)。2)不需编译的软件系统升级,若一个软件系统使用了dll,则

3、该dll被改变(函数名不变)时,系统升级只需要更换此dll即可,不需要重新编译整个系统。事实上,很多软件都是以这种方式升级的。例如我们经常玩的星际、魔兽等游戏也是这样进行版本升级的。3)Dll库可以供多种编程语言使用,例如用c编写的dll可以在vb中调用。这一点上DLL还做得很不够,因此在dll的基础上发明了COM技术,更好的解决了一系列问题。最简单的dll开始写dll之前,你需要一个c/c++编译器和链接器,并关闭你的IDE。是的,把你的VC和C++BUILDER之类的东东都关掉,并打开你以往只用来记电话的记事本程序。不这样做的话,你可能一辈子也不明白d

4、ll的真谛。我使用了VC自带的cl编译器和link链接器,它们一般都在vc的bin目录下。(若你没有在安装vc的时候选择注册环境变量,那么就立刻将它们的路径加入path吧)如果你还是因为离开了IDE而害怕到哭泣的话,你可以关闭这个页面并继续去看《VC++技术内幕》之类无聊的书了。最简单的dll并不比c的helloworld难,只要一个DllMain函数即可,包含objbase.h头文件(支持COM技术的一个头文件)。若你觉得这个头文件名字难记,那么用windows.H也可以。源代码如下:dll_nolib.cpp#includeobjbase.h#incl

5、udeiostream.hBOOLAPIENTRYDllMain(HANDLEhModule,DWORDdwReason,void*lpReserved)HANDLEg_hModule;switch(dwReason)caseDLL_PROCESS_ATTACH:cout"Dllisattached!"endl;g_hModule=(HINSTANCE)hModule;break;caseDLL_PROCESS_DETACH:cout"Dllisdetached!"endl;g_hModule=NULL;break;returntrue;其中DllMain

6、是每个dll的入口函数,如同c的main函数一样。DllMain带有三个参数,hModule表示本dll的实例句柄(听不懂就不理它,写过windows程序的自然懂),dwReason表示dll当前所处的状态,例如DLL_PROCESS_ATTACH表示dll刚刚被加载到一个进程中,DLL_PROCESS_DETACH表示dll刚刚从一个进程中卸载。当然还有表示加载到线程中和从线程中卸载的状态,这里省略。最后一个参数是一个保留参数(目前和dll的一些状态相关,但是很少使用)。从上面的程序可以看出,当dll被加载到一个进程中时,dll"Dllisattache

7、d!"语句;当dll从进程中卸载时,打印"Dllisdetached!"语句。编译dll需要以下两条命令:cl/cdll_nolib.cpp这条命令会将cpp编译为obj文件,若不使用/c参数则cl还会试图继续将objexe,但是这里是一个dll,没有main函数,因此会报错。不要紧,继续使用链接命令。Link/dlldll_nolib.obj这条命令会生成dll_nolib.dll。注意,因为编译命令比较简单,所以本文不讨论nmake,有兴趣的可以使用nmake,或者写个bat批处理来编译链接dll。加载DLL(显式调用)使用dll大体上有两种方式,显式

8、调用和隐式调用。这里首先介绍显式调用。编写一个客户端程序:dll_

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。