该窗体所要完成的任务是调用该dll的程序向窗体输入要链接的数据表的表名当数据表链接成功后可以通过双击DBGrid的某栏向调用该窗体的程序返回表中的某一项值并关闭窗体 () 为该窗体的设置处理代码如下 unit dllForm; interface uses Windows Messages SysUtils Variants Classes Graphics Controls Forms Dialogs DB Grids DBGrids ADODB; type TdllSec = class(TForm) ADOTable: TADOTable; DBGrid: TDBGrid; DataSource: TDataSource; procedure DBGridDblClick(Sender: TObject); procedure FormShow(Sender: TObject); private { Private declarations } public { Public declarations } end; //此函数负责取得当前应用程序的句柄并显示窗体它是供外部调用的函数 function showdllform(Ahandle:Thandle;Acaption:string;tablename:string):string;stdcall; var //用此变量向调用dll的程序返回值 resultstr:string; implementation {$R *dfm} function showdllform(Ahandle:Thandle;Acaption:string;tablename:string):string;stdcall; var newform:Tdllsec; begin //取得句柄 applicationHandle:=Ahandle; //建立窗体 newform:=TdllsecCreate(application); newformCaption:=Acaption+(双击选择); //建立数据库链接 newformADOTableTableName:=tablename; newformADOTableActive:=true; //显示窗体 try newformShowModal; //返回双击所选择的结果 result:=resultstr; //释放该窗体 finally newformFree; end; end; //双击选择数据栏返回数值 procedure TdllSecDBGridDblClick(Sender: TObject); begin resultstr:=dbgridFields[]Text; close; end; //设置表宽度 procedure TdllSecFormShow(Sender: TObject); var i:integer; begin for i:= to dbgridFieldCount do dbgridColumns[i]Width:=; end; end 此时按F键运行该工程的话就会得到如图所示的信息 图 直接运行dll得到的信息 这是因为调试dll时需要一个宿主程序如果编译后直接运行就会得到这个提示解决这一问题需要写一个调用这个dll的exe程序编译后将它的路径填到Run | Parameters菜单的Host app 输入条中 但是实际上如果直接按F或编译允许DLL工程后即便是弹出了上面的对话框若读者浏览该工程所储存目录就可以发现已经生成了一个secdll动态链接库这就是我们在下面的程序中要用到的DLL就可以直接调用了 [] [] |