Com组件详细资料.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Com组件详细资料

动态链接库 动态链接库是个能够被应用程式和其他的DLL调用的过程和函数的集合体,他里面包含的是公共代码或资源。由于DLL代码使用了内存共享技术,在某些地方windows也给了DLL一些更高的权限,因而DLL中能实现一些一般程式所不能实现的功能,如实现windows的HOOK、ISAPI等。同时,DLL还为不同语言间代码共享提供了一条方便的途径。因而DLL在编程时应用较为广泛,本文将介绍怎么在?Delphi?中建立和使用DLL。 一.DLL?库内存共享机制 从使用效果看,DLL和unit?非常像,他们都能被别的工程模块所调用,但二者在内部的实现机制上确存在着差别。如果一个程式模块中用uses语句引用了某个unit,编译程式在编译该模块时,便会连同unit一起编译,并把编译后的可执行代码链接到本程式模块中,这就是个程式模块能够调用所引用unit中过程和函数的原因。当同一个unit被多个工程所引用时,则每个工程中都含有该unit的可执行代码,当含有该unit的多个工程同时执行时,unit的可执行代码会随不同工程而多次被调入内存,造成内存资源的浪费。DLL则不同,他即使被某个工程调用,编译后仍是独立的,也就是说编译后,一个DLL库形成一个独立的可执行文件,而不和所有其他的可执行文件连接在一起,因而DLL库并不从属于某个特定的工程,当多个工程调用同一个DLL库时只有第一个工程把DLL库调入内存,其余工程并不重复调入同一个DLL库到内存,而是到同一个共享内存区读取。并且,DLL的执行代码是在程式运行期间动态调入的,而不是如unit在程式运行时就和整个工程一起调入内存。这样便可消除unit带来的相同代码多处占用内存的弊病。 二?Delphi中DLL库的建立  在Delphi环境中,编写一个DLL同编写一个一般的应用程式并没有太大的差别。事实上作为DLL主体的DLL函数的编写,除了在内存、资源的管理上有所不同外,并不必其他特别的手段。     一般工程文件的格式为:   program  工程标题;    uses    子句;    程式体   而DLLs工程文件的格式为:   library?工程标题;    uses?子句;    exprots?子句;    程式体   他们主要的差别有两点:   1.一般工程文件的头标用program关键字,而DLL工程文件头标用library?关键字。不同的关键字通知编译器生成不同的可执行文件。用program关键字生成的是.exe文件,而用library关键字生成的是.dll文件;   2.如果DLL要输出供其他应用程式使用的函数或过程,则必须将这些函数或过程列在exports子句中。而这些函数或过程本身必须用export编译指令进行编译。 在Delphi主菜单file?中选new...项,在弹出的窗口中双击DLL图标,便会自动给出DLL源模块框架,如下: Library?project1; {...注释...} uses SysUtils,?Classes; begin end.  接下来便可在USES和begin之间加入想在该DLL中实现的过程和函数的定义,并用export和exprots保字把他们引出,以便别的模块引用,在begin和end之间加入初始化代码,初始化代码是用来对DLL变量初始化的。应注意,即便无初始化代码begin和end也不可省略,如下例: library?minmax; function?Min(X,?Y:?Integer):?Integer;?export; begin if?X??Y?then?Min?:=?X?else?Min?:=?Y; end; function?Max(X,?Y:?Integer):?Integer;?export; begin if?X??Y?then?Max?:=?X?else?Max?:=?Y; end; exports Min?index?1, Max?index?2; begin end.  经编译后,并以minmax.DLL存盘后,一个DLL库文件便形成了。 三?DLL库的访问 访问DLL库有两种方式,一种是静态引用,另一种是动态引用。 用静态引用这种方法装入DLL要做两件事情:为DLL?库创建一个输入单元,及用USES把输入单元连接到要使用DLL?函数的程式模块中。为DLL库创建的输入单元和普通的单元的差别仅在于:在他的接口处声明的过程、函数,并不在他的实现部分给出真正的实现代码,而是用external关键字把过程、函数的实现细节委托给外部DLL模块。 external命令的使用语法如下: procedure?/function?过程/函数名;external?DLL模块名; 下面给出为上面创建的minmax.DLL库写的输入

文档评论(0)

xxj1658888 + 关注
实名认证
文档贡献者

教师资格证持证人

该用户很懒,什么也没介绍

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档