问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

有关于DLL的一些问题

发布网友 发布时间:2022-04-23 15:57

我来回答

1个回答

热心网友 时间:2023-10-11 15:07


DLL:
DLL文件(Dynamic Linkable Library 即动态链接库文件),是一种可执行文件,它允许程序共享执行特殊任务所必需的代码和其他资源.
比较大的应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作。可能存在一些模块的功能较为通用,在构造其它软件系统时仍会被使用。在构造软件系统时,如果将所有模块的源代码都静态编译到整个应用程序 EXE 文件中,会产生一些问题:一个缺点是增加了应用程序的大小,它会占用更多的磁盘空间,程序运行时也会消耗较大的内存空间,造成系统资源的浪费;另一个缺点是,在编写大的 EXE 程序时,在每次修改重建时都必须调整编译所有源代码,增加了编译过程的复杂性,也不利于阶段性的单元测试。
Windows 系统平台上提供了一种完全不同的较有效的编程和运行环境,你可以将独立的程序模块创建为较小的 DLL 文件,并可对它们单独编译和测试。在运行时,只有当 EXE 程序确实要调用这些 DLL 模块的情况下,系统才会将它们装载到内存空间中。这种方式不仅减少了 EXE 文件的大小和对内存空间的需求,而且使这些 DLL 模块可以同时被多个应用程序使用。Windows 自己就将一些主要的系统功能以 DLL 模块的形式实现。
一般来说,DLL 是一种磁盘文件,以.dll、.DRV、.FON、.SYS 和许多以 .EXE 为扩展名的系统文件都可以是 DLL。它由全局数据、服务函数和资源组成,在运行时被系统加载到调用进程的虚拟空间中,成为调用进程的一部分。如果与其它 DLL 之间没有冲突,该文件通常映射到进程虚拟空间的同一地址上。DLL 模块中包含各种导出函数,用于向外界提供服务。DLL 可以有自己的数据段,但没有自己的堆栈,使用与调用它的应用程序相同的堆栈模式;一个 DLL 在内存中只有一个实例;DLL 实现了代码封装性;DLL 的编制与具体的编程语言及编译器无关。

在 Win32 环境中,每个进程都复制了自己的读/写全局变量。如果想要与其它进程共享内存,必须使用内存映射文件或者声明一个共享数据段。DLL 模块需要的堆栈内存都是从运行进程的堆栈中分配出来的。Windows 在加载 DLL 模块时将进程函数调用与 DLL 文件的导出函数相匹配。Windows 操作系统对 DLL 的操作仅仅是把 DLL 映射到需要它的进程的虚拟地址空间里去。DLL 函数中的代码所创建的任何对象(包括变量)都归调用它的线程或进程所有。

调用方式:
1、静态调用方式:由编译系统完成对 DLL 的加载和应用程序结束时 DLL 卸载的编码(如还有其它程序使用该 DLL,则 Windows 对 DLL 的应用记录减1,直到所有相关程序都结束对该 DLL 的使用时才释放它,简单实用,但不够灵活,只能满足一般要求。
隐式的调用:需要把产生动态连接库时产生的 .LIB 文件加入到应用程序的工程中,想使用 DLL 中的函数时,只须说明一下。隐式调用不需要调用 LoadLibrary() 和 FreeLibrary()。程序员在建立一个 DLL 文件时,链接程序会自动生成一个与之对应的 LIB 导入文件。该文件包含了每一个 DLL 导出函数的符号名和可选的标识号,但是并不含有实际的代码。LIB 文件作为 DLL 的替代文件被编译到应用程序项目中。
当程序员通过静态链接方式编译生成应用程序时,应用程序中的调用函数与 LIB 文件中导出符号相匹配,这些符号或标识号进入到生成的 EXE 文件中。LIB 文件中也包含了对应的 DL L文件名(但不是完全的路径名),链接程序将其存储在 EXE 文件内部。
当应用程序运行过程中需要加载 DLL 文件时,Windows 根据这些信息发现并加载 DLL,然后通过符号名或标识号实现对 DLL 函数的动态链接。所有被应用程序调用的 DLL 文件都会在应用程序 EXE 文件加载时被加载在到内存中。可执行程序链接到一个包含 DLL 输出函数信息的输入库文件(.LIB文件)。操作系统在加载使用可执行程序时加载 DLL。可执行程序直接通过函数名调用 DLL 的输出函数,调用方法和程序内部其 它的函数是一样的。

2、动态调用方式:是由编程者用 API 函数加载和卸载 DLL 来达到调用 DLL 的目的,使用上较复杂,但能更加有效地使用内存,是编制大型应用程序时的重要方式。

显式的调用:
是指在应用程序中用 LoadLibrary 或 MFC 提供的 AfxLoadLibrary 显式的将自己所做的动态连接库调进来,动态连接库的文件名即是上面两个函数的参数,再用 GetProcAddress() 获取想要引入的函数。自此,你就可以象使用如同本应用程序自定义的函数一样来调用此引入函数了。在应用程序退出之前,应该用 FreeLibrary 或 MFC 提供的 AfxFreeLibrary 释放动态连接库。直接调用 Win32 的 LoadLibary 函数,并指定 DLL 的路径作为参数。LoadLibary 返回 HINSTANCE 参数,应用程序在调用 GetProcAddress 函数时使用这一参数。GetProcAddress 函数将符号名或标识号转换为 DLL 内部的地址。程序员可以决定 DLL 文件何时加载或不加载,显式链接在运行时决定加载哪个 DLL 文件。使用 DLL 的程序在使用之前必须加载(LoadLibrary)加载DLL从而得到一个DLL模块的句柄,然后调用 GetProcAddress 函数得到输出函数的指针,在退出之前必须卸载DLL(FreeLibrary)。

正因为DLL 有占用内存小,好编辑等的特点有很多电脑病毒都是DLL格式文件。但不能单独运行。

动态链接库通常都不能直接运行,也不能接收消息。它们是一些独立的文件,其中包含能被可执行程序或其它DLL调用来完成某项工作的函数。只有在其它模块调用动态链接库中的函数时,它才发挥作用。

MFC:
MFC,微软基础类(Microsoft Foundation Classes),实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎,VC++是WinOS下开发人员使用的专业C++ SDK(SDK,Standard SoftWare Develop Kit,专业软件开发平台),MFC就是挂在它之上的一个辅助软件开发包,MFC作为与VC++血肉相连的部分(注意C++和VC++的区别:C++是一种程序设计语言,是一种大家都承认的软件编制的通用规范,而VC++只是一个编译器,或者说是一种编译器+源程序编辑器的IDE,WS,PlatForm,这跟Pascal和Dephi的关系一个道理,Pascal是Dephi的语言基础,Dephi使用Pascal规范来进行Win下应用程序的开发和编译,却不同于Basic语言和VB的关系,Basic语言在VB开发出来被应用的年代已经成了Basic语言的新规范,VB新加的Basic语言要素,如面向对象程序设计的要素,是一种性质上的飞跃,使VB既是一个IDE,又成长成一个新的程序设计语言),MFC同BC++集成的VCL一样是一个非外挂式的软件包,类库,只不过MFC类是微软为VC++专配的..
MFC是Win API与C++的结合,API,即微软提供的WinOS下应用程序的编程语言接口,是一种软件编程的规范,但不是一种程序开发语言本身,可以允许用户使用各种各样的第三方(如我是一方,微软是一方,Borland就是第三方)的编程语言来进行对Win OS下应用程序的开发,使这些被开发出来的应用程序能在WinOS下运行,比如VB,VC++,Java,Dehpi编程语言函数本质上全部源于API,因此用它们开发出来的应用程序都能工作在WinOS的消息机制和绘图里,遵守WinOS作为一个操作系统的内部实现,这其实也是一种必要,微软如果不提供API,这个世上对Win编程的工作就不会存在,微软的产品就会迅速从时尚变成垃圾,上面说到MFC是微软对API函数的专用C++封装,这种结合一方面让用户使用微软的专业C++ SDK来进行Win下应用程序的开发变得容易,因为MFC是对API的封装,微软做了大量的工作,隐藏了好多程序开发人员在Win下用C++ & MFC编制软件时的大量内节,如应用程序实现消息的处理,设备环境绘图,这种结合是以方便为目的的,必定要付出一定代价(这是微软的一向作风),因此就造成了MFC对类封装中的一定程度的的冗余和迂回,但这是可以接受的.
最后要明白MFC不只是一个功能单纯的界面开发系统,它提供的类绝大部分用来进行界面开发,关联一个窗口的动作,但它提供的类中有好多类不与一个窗口关联,即类的作用不是一个界面类,不实现对一个窗口对象的控制(如创建,销毁),而是一些在WinOS(用MFC编写的程序绝大部分都在WinOS中运行)中实现内部处理的类,如数据库的管理类等,学习中最应花费时间的是消息和设备环境,对C++和MFC的学习中最难的部分是指针,C++面向对像程序设计的其它部分,如数据类型,流程控制都不难,建议学习数据结构C++版..
MFC是微软封装了的API。什么意思呢?windows作为一个提供功能强大的应用程序接口编程的操作系统,的确方便了许多程序员,传统的win32开发(直接使用windows的接口函数API)对于程序员来说非常的困难,因为API函数实在太多了,而且名称很乱,从零构架一个窗口动辄就是上百行的代码。MFC是面向对象程序设计与Application framework的完美结合,他将传统的API进行了分类封装,并且为你创建了程序的一般框架.

内置函数的优点:
•不敏感:
WSCRIPT.ECHO
WScript.echo
wscript.echo
虽然对大小写不敏感,但是不应该使用全大写或全小写,这样使得脚本难于阅读
•跳过所有多余的空格
For example:
WScript. Echo "Hello"
is the same as:
WScript.Echo "Hello"
•不规定每行的最大长度
换言之,你可以将多个逻辑行用colon divider连接在一起
WScript.Echo "Test One" : WScript.Echo "Test Two"
•Vbscrip 允许你分割一个长句,可以用一个空格和一个下划线来隔断,这样使得阅读更加容易一点。
WScript.Echo "Message to" _
& vUserName _
& " Please make sure that you remember" _
& " to logoff or lock your workstation" _
& " if you leave it unattended, Thanks"追问我要的是文件不是DLL的资料

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
中国银行办卡怎么办的 中国银行中银单位结算卡都有哪几种类型支持柜台交易? 报考驾驶证过科目二的时候有哪些需要注意的小细节? 驾照科目二要有什么注意事项? 我的右肩总是酸疼 有时候一动好像有东西扎脊梁骨一样。 我的背这半年睡觉醒来酸疼,是肩胛骨之间的那段脊柱两侧的肉疼,最近腰... 跩了跤,屁股和整个脊梁骨都酸疼怎么办?、~ ...关于创意内容的。我们要写三篇感恩教官,感恩辅导员,感恩代班学 ... ...E的定义式为E=Fq,根据此式,下列说法中正确的是( )①上式说明电场中... 温碧泉蓝皙润白精华霜的延展性怎么样? 如果一个男生拿动画片蜡笔小新的图片做微信头像,说明他幼稚吗?还是怎样呢? 篮球兴趣小组男生有34人女生有十八人活动时每人借走一个篮球50个篮球够不够, 篮球兴趣小组的心得体会 作文 200字 我想找几个男生卡通的微信头像,可爱的,或者逗逼的都可以。 com组件,dll,脚本及批处理四者之间的区别? 换兴趣小组篮球充分理由 2019最好看的微信动漫头像有哪些? 扩展名为.dll.bat 的文件又什么用? 篮球训练计划!!! 如何构建智慧教育服务? 篮球的教案这么写 dll是什么文件啊 .dll .pong .html .js分别是什么文件,不同的文件有什么作用,可以用什么打开文件 兴趣小组名称有哪些? 我国拟对犯罪未成年人专门教育,未成年保护法够完善吗? 请问一上.dll和.inf格式的文件是什么文件呀?用什么用呀? 兴趣小组有哪些 上海拟对密室剧本杀内容备案管理,这是为什么? 什么是智慧教育?学习它有什么好处呢? 我国拟对犯罪未成年人专门教育,你赞同降低刑事责任年龄吗? 小明想向妈妈要求参加学校开展的每周四下午放学后篮球兴趣小组活动小明怎样说? 求头像!(男的,卡通,不露脸,不露脸的条件是最好是背影,都把你们QQ微信头像搬出来吧!) asp是什么,dll又是什么? ActiveX和DLL是什么啊 急!需要一张图片,要高清的,是漫画一个男生孤独的背影,要全身,我要做微信头像。(微信名孤独的死小孩 银行个人贷款利率是多少??? main.dll是什么文件? 个人向银行贷款最多能贷多少?还贷期限最多是多久?利息是怎么算了 如何打开电脑中的DLL文件 ? 喜欢用动漫头像的男生是什么样的? 个人贷款利率是多少 dll文件到底是什么类型的文件啊,有病毒吗 .dll文件是什么文件?老师说在编程时可以直接引入的! 个人在银行贷款需要什么条件?利率是多少? 一般银行个人贷款10万的年利息大概是多少? 个人抵押贷款的银行利息是多少? 个人一次性可以向银行贷多少款啊,利息怎么样? 个人向银行贷款30万一年利息是多少 泰康人寿的领取方式是什么? 泰康人寿的红利金怎么拿
  • 焦点

最新推荐

猜你喜欢

热门推荐