DLL文件在Delphi的创建及调用

王朝delphi·作者佚名  2006-01-08
宽屏版  字体: |||超大  

主题: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 ==================

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有