Win32下动态链接库(DLL)编程原理

Win32下动态链接库(DLL)编程原理

ID:41032581

大小:52.00 KB

页数:11页

时间:2019-08-14

Win32下动态链接库(DLL)编程原理_第1页
Win32下动态链接库(DLL)编程原理_第2页
Win32下动态链接库(DLL)编程原理_第3页
Win32下动态链接库(DLL)编程原理_第4页
Win32下动态链接库(DLL)编程原理_第5页
资源描述:

《Win32下动态链接库(DLL)编程原理》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、主题:DLL是Windows最重要的组成要素,Windows中的许多新功能、新特性都是通过DLL来实现的,因此掌握它、应用它是非常重要的。动态链接库不仅可以作为一个运行模块,包括函数代码,而且可以包含程序以外的任何数据或资源(位图、图标等等)。动态链接库就是给应用程序提供函数或者资源。DLL是一种磁盘文件(通常带有DLL扩展名),它由全局数据、服务函数和资源组成,在运行时被系统加载到进程的虚拟空间中,成为调用进程的一部分。在运行时,只有当EXE程序确实要调用这些DLL模块的情况下,系统才会将它们装载到内存空间中。每个进程都复制了自己的读/写全局变

2、量。如果想要与其它进程共享内存,必须使用内存映射文件或者声明一个共享数据段。DLL模块需要的堆栈内存都是从运行进程的堆栈中分配出来的。DLL文件中包含一个导出函数表。这些导出函数由它们的符号名和称为标识号的整数与外界联系起来。导入导出函数:在DLL代码中,必须像下面这样明确声明导出函数:__declspec(dllexport)intMyFunction(intn);但也可以在模块定义(DEF)文件中列出导出函数,不过这样做常常引起更多的麻烦。在应用程序方面,要求像下面这样明确声明相应的输入函数:__declspec(dllimport)intM

3、yFuncition(intn);(这是隐式链接dll)仅有导入和导出声明并不能使应用程序内部的函数调用链接到相应的DLL文件上。应用程序的项目必须为链接程序指定所需的输入库(LIB文件)。而且应用程序事实上必须至少包含一个对DLL函数的调用。隐式链接和显式链接dll显式:typedefdouble(SQRTPROC)(double);HINSTANCEhInstance;//设置全局变量用于存储DLL句柄SQRTPROC*pFunction;第二个变量ShowMe是指向DLL,库中函数的指针VERIFY(hInstance=::LoadLibr

4、ary("c://winnt//system32//mydll.dll"));VERIFY(pFunction=(SQRTPROC*)::GetProcAddress(hInstance,"SquareRoot"));doubled=(*pFunction)(81.0);//调用该DLL函数隐式:程序员通过静态链接方式编译生成应用程序时,应用程序中的调用函数与LIB文件中导出符号相匹配,这些符号或标识号进入到生成的EXE文件中.隐式链接和显式链接dll的区别:在隐式链接方式中,所有被应用程序调用的DLL文件都会在应用程序EXE文件加载时被加载在到

5、内存中;但如果采用显式链接方式,程序员可以决定DLL文件何时加载或不加载。DLLMAIN函数:当Windows加载DLL模块时调用这一函数。系统首先调用全局对象的构造函数,然后调用全局函数DLLMain。DLLMain函数不仅在将DLL链接加载到进程时被调用,在DLL模块与进程分离时(以及其它时候)也被调用。进程中的每个DLL模块被全局唯一的32字节的HINSTANCE句柄标识。进程自己还有一个HINSTANCE句柄。所有这些模块句柄都只有在特定的进程内部有效,它们代表了DLL或EXE模块在进程虚拟空间中的起始地址。寻找DLL的路径:Window

6、s将遵循下面的搜索顺序来定位DLL:1.包含EXE文件的目录,2.进程的当前工作目录,3.Windows系统目录,4.Windows目录,5.列在Path环境变量中的一系列目录。要点:一:DLL文件的省缺名称是与工程名一致的(也是在.DEF文件中LIBRARY之后的名字),不要试图在制作完毕之后通过简单的修改.DLL文件的文件名来改变它,这会导致使用该DLL的应用程序错误.DLL中定义有两种函数:导出函数(exportfunction):可以被其他模块调用内部函数(internalfunction):只能在DLL内部使用基于MFC的DLL不适用与

7、制作读取二进制文件的DLL(不易移植,无法正确读取与DOS应用程序共享的二进制文件)基于API的DLL可以正确读取在DOS环境中创建的二进制文件.纯标准函数dll可以在很多平台使用!(移植性最强)为了让其它语言使用:除非你绝对需要使用C++编码,否则我还是推荐使用C来写DLL。VC下的DLL类型:Non-MFCDLL:指的是不用MFC的类库结构,直接用C语言写的DLL,其输出的函数一般用的是标准C接口,并能被非MFC或MFC编写的应用程序所调用。LL,RegularDLL:和下述的ExtensionDlls一样,是用MFC类库编写的。明显的特点是

8、在源文件里有一个继承CWinApp的类。其又可细分成静态连接到MFC和动态连接到MFC上的。但静态连接到MFC的动态连接库只被VC的专业

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

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

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