⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chapt18.htm

📁 Delphi5编程指南.rar
💻 HTM
字号:
<html><head><title>第十八章  动态链接库</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body bgcolor="#00000" text="#00cc66"><p align="center"><b><font size="4" color="#FF3333">第十八章 动态链接库</font></b></p><p><b> 18.1 创建动态链接库</b><br>   下面是建立动态链接库的具体步骤:<br>  (1)启动Delphi。<br>  (2)在IDE选择File|New命令,在New Items对话框选择DLL,Delphi将为你创建一个DLL程序的外壳。<br>  (3)添加要实现的过程或函数。 <br>   Delphi首先创建动态链接库用的Project文件。这个Project文件只是一个定义DLL的外部接口。 下面是Delphi创建的动态链接库DLL的外部接口:<br>  library Project1;<br>  { Important note about DLL memory management: ShareMem must be the first unit   in your library's USES clause AND your project's (select View-Project Source)   USES clause if your DLL exports any procedures or functions that pass strings   as parameters or function results. This applies to all strings passed to and   from your DLL--even those that are nested in records and classes. ShareMem is   the interface unit to the DELPHIMM.DLL shared memory manager, which must be   deployed along with your DLL. To avoid using DELPHIMM.DLL, pass string information   using PChar or ShortString parameters. }<br>  uses <br>    SysUtils, Classes;<br>  begin<br>  end.<br>    程序开头的注释是Delphi自动加上的,意思是如果DLL输出的过程或函数带有长字符类型的参数,或者函数返回类型是长字符串或带有长字符串元素的构造类型,Object   Pascal规定无论是DLL还是调用它的程序必须把ShareMem单元加到Uses部分。而ShareMem单元是从DelphiMM.DLL这个DLL中引入的接口单元,因此这种程序分发时必须带有DelphiMM.DLL。Delphi建议为了避免使用DELPHIMM.DLL,传递字符串信息时使用PChar或ShortString类型参数。<br>    在project文件中,最下面有begin_end段。实际上这部分是在当DLL被装载时所运行的部分。就是说各应用程序在需要DLL前,可进行某些处理,因此可以根据应用程序的需要,作各种初期化处理等。<br>    DLL通常都要提供输出的例程,因此一般都有Exports节,该节列出DLL要输出的例程,下面是通常DLL用的Project文件;<br>  Library DLLForm; <br>    Uses SysUtils, Classes, <br>    DLLMain in 'DllMain.Pas'{Form1} <br>    exports ShowForm index 1 name 'ShowForm';<br>  begin <br>  end<br>    Exports节列出DLL要输出的例程,如本例的ReverseStr过程。输出一个例程表示要让该例程被DLL外部的程序看见。一个例程如果没有输出,则该例程只是一个内部函数。<br>    在exports节中可指定的项目为内部函数名,index节、name节。后两者可省略。这里index节和name节所设置值,可从外部直接检索。从Windows的构造上来讲用index节设置函数的序号,可高速检索,但考虑到DLL的扩张,在name节用设置的函数名来检索较为合理。<br>   通常,为了进行实际的处理,还必须另外创建Unit文件。Unit文件部分一般对应一个窗体(Form),你可以在该窗体上设计安装各种组件,这和通常的窗体(Form)没有什么两样。但是,根本区别在于DLL的主窗体(Form)的创建。通常的窗体(Form)是用Project文件自动生成窗体(Form)。但是,DLL必须自己创建。<br>   DLL中窗体单元与其它窗体单元不同之处是在单元的Interface部分,添加了以下声明:<br>    function GetColor (Col: LongInt): LongInt; stdcall;<br>    该过程在启动时建立窗体,设置一些初始值,然后运行窗体,最后取出结果数据。该代码与我们通常在程序中编写的代码不同之处在于,出现了异常处理的代码:<br>  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -