主题:DLL文件在Delphi的创建及调用
现时系统的开发,多数都在几人以上的组合,工合作方式开发,这样也方便系统的快速开发目的。 而DLL的方法最为方便。我现整理了一些这方面资料,希望能帮助一些有需要的同学(记得我刚学时,请人教是一不可想象的事)。 //(Copy source book)
一.函数过程的写法:
library FIRSTDLL;
uses SysUtils, Classes;
{$R *.RES} // 1.定义函数具体过程和输出接口方式 // -------------------------------- // 函数 1 // 功能:事数据3倍放大函数 // -------------------------------- function BBnToSSnn(SourceResult:Integer):Integer;stdCall; begin if SourceResult>0 then Result:=SourceResult+3 //结果存放于Result else Result:=SourceResult; end;
exports BBnToSSnn; //2.函数输出口定义 end.
== ==
二.在DLL中创建Form ======================= 1.一步,创建DLL工程,及加入设置好的Form
library MGRPERSN; uses SysUtils, Classes, MGRPERFM in ''''MGRPERFM.pas'''' {FormPERSON};//1.Form的代码(与一般的Form一样)
{$R *.RES} exports ShowPerSN;//2.函数输出口定义 begin end.
2. 在DLL设定的Form的设置 =========================================== unit MGRPERFM;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, ToolWin, ImgList;
type TFormPERSON = class(TForm) private { Private declarations } public { Public declarations } end;
//些处的变量不再用,给其改个地方,如下(改变之一) //var // FormPERSON: TFormPERSON;
{宣布Form函数出口}//改变之二 function ShowPerSN(AHandle: THandle; ACaption: String):BOOL; StdCall;
implementation
{$R *.DFM} //函数据过程定义 function ShowPerSN(AHandle: THandle; ACaption: String):BOOL; var FormPERSON: TFormPERSON; //定义窗体类(上面的放到了此处) begin //拷贝应用程式句柄给DLL的应有程式对象 Application.Handle := AHandle; FormPERSON := TFormPERSON.Create(Application);//创建控件TForm try FormPERSON.Caption := ACaption; FormPERSON.ShowModal;//显示此Form Result := False; //反回成功值 finally FormPERSON.Free; end; end;
三.DLL中函数及窗体的调用 ========================== 1.调用方法一 -------------- implementation //在此的下方写明调用函数的DLL
{$R *.DFM} //DLL内函数调用 function BBnToSSnn(SourceResult:Integer):Integer; StdCall external ''''FIRSTDLL.DLL'''';
........
2.调用方法二 ============== type //在此创建一个函数类 // 1 ------------------------------- TShowPerSN = function (AHandle: THandle; ACaption: String): BOOL; StdCall; EDLLLoadError = class(Exception);//同时分创建一个出错记录类 // 1 ------------------------------- TMAINCLTR = class(TForm) //这里不变,系统自动生成
......
procedure TMAINCLTR.ToolButton1Click(Sender: TObject); var //按钮的调用事件:调用过程 LibHandle: THandle; ShowPerSN: TShowPerSN; begin Application.Title:=''''人力资源管理系统DLL文件测试程式''''; { Attempt to load the DLL 尝试装入DLL文件} LibHandle := LoadLibrary(''''MGRPERSN.DLL''''); try if LibHandle = 0 then raise EDLLLoadError.Create(''''无法成功装入MGRPERSN.DLL''''); @ShowPerSN := GetProcAddress(LibHandle, ''''ShowPerSN''''); if not (@ShowPerSN = nil) then ShowPerSN(Application.Handle, ''''人事资料管理'''')//呼叫出窗体 else RaiseLastWin32Error; finally FreeLibrary(LibHandle); // Unload the DLL. end; end; ============== END ==================
[系统软件]InstallShield Express for delphi制作安装程序定… [常用软件]InstallShield Express制作Delphi数据库安装程序 [Delphi程序]为什么选择Delphi.Net ? [Delphi程序]《关于VisiBroker For Delphi的使用》(4) [Delphi程序]Delphi 程序员代码编写标准指南 [Delphi程序]转贴:Conversion to Delphi 6: Missing unit Pro… [Delphi程序]Borland Delphi 9 的新特性 [Delphi程序]Delphi 键盘码表 [Delphi程序]Chuck Jazdzewski的离开意味着Delphi的终结吗? [Delphi程序]Delphi Access violations 问题的解决之道
|