以下是比较三个数最大值的一个DLL,如何用动态调用?
library max;
uses
SysUtils,
Classes;
{$R *.res}
function max1(a,b,c:integer):integer;stdcall;
var t:integer;
begin
if a>b then t:=a
else t:=b;
if t>c then result:=t
else result:=c;
end;
exports
max1;
begin
end.主程序有四个框,Edit1,Edit2,Edit3为输入框,Edit4为输出框
library max;
uses
SysUtils,
Classes;
{$R *.res}
function max1(a,b,c:integer):integer;stdcall;
var t:integer;
begin
if a>b then t:=a
else t:=b;
if t>c then result:=t
else result:=c;
end;
exports
max1;
begin
end.主程序有四个框,Edit1,Edit2,Edit3为输入框,Edit4为输出框
解决方案 »
- 怎么指定cxGrid某个单元格的背景色
- adoquery与dbgird问题? 高手帮帮忙!!!!急...在线等.......
- 怎样进行文件的复制.....
- 难道Query中有LookUp字段就无法Insert了吗?
- 我的Delphi在运行是说缺少后缀为dll的文件?怎么办?
- 请问如何把可执行程序中的数据库分离出来?
- 最近我做的一个软件总是在运行时报这样的错。急急!!!
- 关于十六进制转化的问题
- 原来写C++,VB.现在公司要用DELPHI,我是处学者,希望能介绍几本书指导指导!!!有没有免费的DELPHI电子书的下载网站!!!!!谢谢
- 如何在quickrep中把band竖立?
- 设计程序
- override和overload(希望对大家有帮助。重发自2003年的帖。)
h :thandle;
max1 :function(a,b,c:integer):integer;stdcall;
begin
h := LOADLIBRARY('max.DLL');
@max1 := GETPROCADDRESS( h, 'max1');
edit4.text := inttostr( max1( strtoint(edit1.text),strtoint(edit2.text),strtoint(edit3.text) );
FREELIBRARY( h);
end;
Tmax = function max1(a,b,c:integer):integer;stdcall;
var
PMax: TFarproc;
PHandle : THandle;
A,B,C,D:Double;
DllName : string;
begin
A := StrToFloat(edit1.Text);
B := StrToFloat(edit2.Text);
C := StrToFloat(edit3.Text); DllName := 'max.dll';
PHandle := LoadLibrary(PChar(DllName));
if PHandle <> 0 then
begin
try
PTest := GetProcAddress(PHandle, 'Max1');
D := Tmax(PMax)(A,B,C);
finally
FreeLibrary(Cardinal(DllName));
end;
end
else
ShowMessage('加载DLL失败!');
end;差不多就是这样了
GetProcAddress 获得函数地址
执行函数
Freelibrary 释放dll
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
Edit4: TEdit;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var max1:function(a,b,c:integer):integer;stdcall;
PHandle : THandle;
i,j,k,p:integer;
begin
PHandle := LoadLibrary('max.dll');
if PHandle <> 0 then
begin
i := StrToint(edit1.Text);
j := StrToint(edit2.Text);
k := StrToint(edit3.Text);
try
@max1:= GetProcAddress(PHandle,'Max1');
p:= max1(i,j,k);
Edit4.Text:=inttostr(p);
finally
FreeLibrary(PHandle);
end;
end
else
ShowMessage('¼ÓÔØDLLʧ°Ü!');
end;
end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
Edit4: TEdit;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Tmax:function(a,b,c:integer):integer;stdcall;var
Form1: TForm1;implementation{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
max1:Tmax=nil;
PHandle : THandle;
i,j,k,p:integer;
begin
PHandle := LoadLibrary('max.dll');
if PHandle <> 0 then
begin
i := StrToint(edit1.Text);
j := StrToint(edit2.Text);
k := StrToint(edit3.Text);
try
@max1:= GetProcAddress(PHandle,'Max1');
if Assigned(@max1) then
p:= max1(i,j,k);
Edit4.Text:=inttostr(p);
finally
FreeLibrary(PHandle);
end;
end
else
ShowMessage('加载DLL失败!');
end;end.
max.dll要和你执行文件在同一目录
max1:Tmax=nil;
改为
var
max1:Tmax;
请问下,为何此处要设一IF函数,代码什么意思?