——此文章摘自《Delphi 数据库开发经典案例解析》定价¥特价¥购买>> 在前面的章节中无论我们的程序是多文档还是多窗口结构使用到的窗体都是预先定义好并在编写程序时就加载到了工程文件之中的在这里我们将要用到DLLDLL是DynamicLink Libraries(动态链接库)的缩写它包含代码数据和资源可以被其他程序共享使用DLL应用程序能够在程序运行期间动态地调入代码而不是在编译期间静态地链接代码可以认为DLL和EXE基本上是一回事只是DLL不能直接执行而必须由应用程序或者其他DLL调用DLL为应用程序间的资源共享提供了方便同时也是多语言混合编程的重要手段由此可见学习使用DLL是Windows程序员必须掌握的一项重要技术 使用DLL从效果上看很像使用单元(Unit)因为程序员可以在一个程序模块中调用别的Unit中声明且定义的过程函数甚至变量如果一个程序模块中用uses语句应用别的Unit那么编译程序在编译该模块时便会连同被调用的Unit一同编译并且把编译后得到的课执行文件连接到本模块的可执行文件上即编译后的一个工程Project只有一个可执行文件但是可以包含多个单元的执行代码当Unit被多个Project所引用则它的执行代码将会出现在多个Project的可执行代码中如果多个Project同时运行那么Unit的代码会随着Project多次被调入内存内存资源被多个重复的代码段所占用既浪费空间又影响程序的允许速度用DLL就可以解决这个问题DLL被某个可project编译后仍然是独立的当多个project调用某个dll文件时只有第一个调用dll的project才把DLL的执行代码调入内存其他的Project并不把Dll调入而是增加其引用次数并与第一个Project一起共享某个DLL的执行代码 例如在本章中我们将设计一个DLL它本身有一个窗体在外部程序调用它时依靠外部变量输入的变量来判断调用数据库中的哪个表并有一个函数负责返回双击某数据栏后该数据栏的内容使用这个DLL我们可以在程序中通过调用它来浏览财务管理数据库中的任何一个表并可以通过双击来选择某一栏的内容读者可以在读完本节后回顾前面三章中我们如何处理类似的任务例如在第章中进货单和销售单对于双击选择商品名称编号的处理再和本节中的处理方法加以比较就可以看到DLL的巨大作用 至于DLL更深层次的问题不属于本书的讨论范围这里不再叙述 在本章中我们用到的DLL非常简单我们使用它的目的在于向读者介绍这样一种方法其功能完全可以单独建立一个MDI子窗体来替代在以后的章节中我们将越来越多地用到这些高级技术 () 首先重新打开Delphi选择File | New | Other在弹出的窗口中的New选项卡中选择DLL Wizard并单击OK如图所示将建立一个新的工程 () 将这个新的工程保存为secdpr再新建一个窗体(Form)将其Name属性改为dllSec并保存该窗体文件为dllFormpas查看工程的代码可以看到如下程序 library sec; uses SysUtils Classes //此处是加入工程的unitdllSec是该Unit的Name而dllForm是该Unit保存的文件名 dllForm in dllFormpas {dllSec}; {$R *res} exports //这是将要输出供外部调用的函数 showdllform index ; begin end 图 建立DLL工程文件 () 在新建的Form放置如图所示的控件 图 将在dll调用的窗体 该窗体的控件设置如表所示 表 主窗体属性设置 [] [] |