dll文件有什么作用(dll文件长什么样)

本文主要介绍dll文件的作用是什么(dll文件长什么样),下面一起看看dll文件的作用是什么(dll文件长什么样)相关资讯。
较大的应用程序由许多模块组成,这些模块分别执行相对独立的功能,它们相互配合完成整个软件系统的工作。可能会有一些具有通用功能的模块,在构建其他软件系统时仍然会用到。在构造一个软件系统时,如果把所有模块的源代码都静态编译成整个应用测试。
windows系统平台提供了一个完全不同的、更有效的编程和运行环境。您可以将独立的程序模块创建为较小的dll(动态链接库)文件,并分别编译和测试它们。在运行时,只有当exe程序真正想要调用它们时,系统才会将这些dll模块加载到内存空间中。这种方法不仅减少了exe文件的大小和对内存空间的需求,还使这些dll模块能够被多个应用程序同时使用。windows本身以dll模块的形式实现了一些主要的系统功能。
一般来说,dll是一种磁盘文件,可以。dll,。drv。丰,。sys和许多带有。exe作为扩展名。它由全局数据、服务函数和资源组成,在运行时被系统加载到调用进程的虚拟空间中,成为调用进程的一部分。如果与其他dll没有,文件通常被映射到进程的虚拟空间中的同一个地址。dll模块包含各种向外界提供服务的导出函数。dll可以有自己的数据段,但不能有自己的堆栈,使用与调用它的应用程序相同的堆栈模式;一个dll在内存中只有一个实例;dll实现代码封装;dll的编译与具体的编程语言和编译器无关。
在win32环境中,每个进程都复制自己的读/写全局变量。如果要与其他进程共享内存,必须使用内存映射文件或声明一个共享数据段。dll模块所需的堆栈内存是从运行进程的堆栈中分配的。windows在加载dll模块时将进程函数调用与dll文件的导出函数相匹配。windows操作系统对dll的操作只是映射dll。转到需要它的进程的虚拟地址空间。dll函数中的代码创建的任何对象(包括变量)都属于调用它的线程或进程。
呼叫模式
1.静态调用编译器系统在应用程序结束时完成加载dll和卸载dll的编码(如果有其他程序使用该dll,则该dll在windows中的应用记录减1,直到所有相关程序都使用完该dll后才释放,简单实用,但不够灵活,只能满足一般要求。
隐式调用:您需要添加。生成应用程序项目的动态链接库时生成的lib文件。当你想使用dll中的函数时,你只需要解释它。隐式调用不需要调用loadlibrary和freelibrary。当程序员创建一个dll文件时,链接器会自动生成一个对应的lib导入文件。该文件包含每个dll导出函数的符号名和可选标识号,但不包含实际代码。lib文件作为dll的替代文件被编译到应用程序项目中。
程序员通过静态链接编译生成应用程序时,应用程序中的调用函数与lib文件中导出的符号相匹配,这些符号或标识号进入生成的exe文件。lib文件还包含相应的dl l文件名(但不是完整的路径名),该文件名由链接器存储在exe文件中。
当应用程序需要加载dll文件时,windows根据这些信息找到并加载dll,然后通过符号名或标识号动态链接dll函数。加载应用程序exe文件时,应用程序调用的所有dll文件都将被加载到内存中。可执行程序链接到输入库文件(。lib文件),包含有关dll输出函数的信息。操作系统在加载可执行程序时加载dll。可执行程序通过函数名直接调用dll的输出函数,调用方法与程序内部其他函数相同。
2.动态调用程序员用api函数加载和卸载dll,达到调用dll的目的,使用起来比较复杂,但可以更有效地利用内存,是编译大型应用程序的重要。
显式调用:指用mfc提供的loadlibrary或afxloadlibrary在应用程序中显式调用自己制作的动态链接库,动态链接库的文件名就是上述两个函数的参数,然后用getprocaddress获取要引入的函数。从那时起,您可以调用这个传入函数,就像它是这个应用程序的自定义函数一样。在应用中在程序退出之前,应该使用mfc提供的freelibrary或者afxfreelibrary来释放动态链接库。直接调用win32的loadlibary函数,并将dll的路径指定为参数。loadlibary返回应用程序在调用getprocaddress函数时使用的提示参数。getprocaddress函数将符号名或标识号转换成dll中的地址。程序员可以决定何时加载或不加载dll文件,显式链接决定在运行时加载哪个dll文件。使用dll的程序在使用前必须加载dll以获取某个dll模块的句柄,然后调用getprocaddress函数获取输出函数的指针,退出前必须卸载dll (free loadlibrary)。
windows将按照下列搜索顺序查找dll:
包含exe文件的目录进程的当前工作目录windows系统目录windows目录是mfc中path环境变量dll中列出的一系列目录。
非mfc dll:指不使用mfc类库结构,直接用c语言编写的dll,其输出函数一般使用标准c接口,可以被非mfc或mfc编写的应用程序调用。常规dll:和下面描述的扩展dll一样,是用mfc类库写的。明显的特点是源文件中有一个继承cwinapp的类。可以细分为静态连接mfc和动态连接mfc。静态连接到mfc 的动态连接库仅受vc 的专业版和企业版。任何win32程序都可以使用这种dll应用程序中的输出函数,包括使用mfc的应用程序。输入函数具有以下形式:
外部和内部c 导出您的exportedfunction;
没有外在的 c 装饰,输出函数只能从c代码调用。
dll应用程序是从cwinapp派生的,但是没有消息循环。
动态链接到mfc的常规dll应用程序中的输出函数可由任何win32程序使用,包括使用mfc的应用程序。但是,dll的所有函数输出都应该以下面的语句开始:
此语句用于正确切换mfc模块。状态。
用支持dll技术的所有语言编写的应用程序都可以调用常规dll。在这个动态链接库中,它必须有一个继承自cwinapp的类,而dllmain函数是mfc提供的,所以不需要显式编写。
扩展dll:用来复用从mfc继承的类,也就是这种类型的动态链接库可以用来输出从mfc继承的类。它输出的函数只能由使用mfc并动态链接到它的应用程序使用。你可以从mfc中继承你想要的,更适合自己使用的东西,提供给你的应用。也可以随意为应用程序提供mfc或mfc继承类对象指针。扩展dll是通过使用mfc的动态链接版本创建的,它仅由使用mfc类库编写的应用程序调用。扩展dll不同于常规dll,因为它没有从cwinapp继承的类对象,所以必须为dllmain函数添加初始化代码和结束代码。
与常规dll相比,有以下不同之处:
1.它没有从cwinapp派生的对象;
2.它必须有一个dllmain函数;
3.当dllmin调用afxinitextensionmodule函数时,需要检查函数的返回值。如果它返回0,dllmmain也返回0;
4.如果它想要输出cruntimeclass类型的对象或资源,它需要提供一个初始化函数来创建一个cdynlinklibrary对象。而且,需要输出初始化函数;
5.使用扩展dll的mfc应用程序必须有一个从cwinapp派生的类,一般在initinstance中调用扩展dll的初始化函数。
dll入口函数
1.每个dll都必须有一个入口点,dllmain是一个默认的入口函数。dllmain负责初始化和终止。每当一个新进程或该进程的一个新线程访问该dll时,或者每个访问该dll的进程或线程不再使用该dll或结束时,将调用dllmain。但是,使用terminateprocess或terminatethread结束进程或线程不会调用dllmain。
dllmain的函数原型;
bool apientry dllmain(句柄hmodule,dword ul_reason_for_call,lpvoidlpreserved){ switch(ul _ reason _ for _ call){案例dll_process_attach:.......凯斯·dll_thread_attach:.......凯斯·dll_thread_detach:.......凯斯·dll_process_detach:.......返回true}}
参数:
hmoudle:是调用动态库时指向自身的句柄(其实是指向_dgroup段的选择器);
ul_reason_for_call:是一个标志,解释为什么调用动态库。当进程或线程加载或卸载动态链接库时。
标签:
函数调用应用程序
了解更多dll文件的作用是什么(dll文件长什么样)相关内容请关注本站点。

投影仪画面太小怎么放大(投影仪画面怎么变小)
手机登录路由器
系统还原鼠标点不动怎么解决(电脑系统还原点)
1069070069发送失败(1069009010021发送失败)
怎样关闭win8自动更新(win8.1怎么关闭更新)
dll文件有什么作用(dll文件长什么样)
2.5k屏幕字体不清楚(2k屏字体模糊win10)
哪款笔记本打游戏好,华为笔记本游戏本哪款最好
附近修打印机维修,广州哪里可以维修打印机的推荐一家信誉比较好的给我什么位置
魅族手表怎么样好不好(魅族手表2021)
买电脑需要注意什么配置呢英语,买笔记本电脑要注意哪些配置
win8.1系统开机桌面部分图标不见了怎么恢复(win8开机桌面没有图标)
小米官网怎么看评论,小米官网怎么评价
至强cpu性能排行,现在最强的CPU和GPU型号
ios设置锁屏壁纸怎么实现,怎么设置苹果手机壁纸
苹果4s软件晃动怎么办,苹果4S想删除个程序怎么长按只会晃没有小X啊怎么办还是删
车载无损音乐u盘质量排名,网上卖的车载无损音乐u盘值得买吗
曲面屏和平面屏哪个好 知乎(曲面屏和平面屏哪个耐用)
oppo互动功能(oppo手机互动在哪)
微软发布linux发行版(微软office linux)