📄 dynacall.pas
字号:
unit DynaCall;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
GroupBox1: TGroupBox;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
Label3: TLabel;
Edit3: TEdit;
Label4: TLabel;
Edit4: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
type
TintFunction=Function(x,y,z:integer):integer;stdcall; //定义函数类型
var
x,y,z:integer;
{$R *.dfm}
Function Calculate(FunName:Pchar):integer;
var
Dllname:string; //存放动态链接库文件名
Hinst:Thandle; // 加载动态链接库文件的句柄
ProcName:Pchar; //要调用的函数或过程名
Fpointer:TFarProc; //函数指针
MyFunct:TintFunction; //函数变量
begin
getdir(0,dllname);
dllname:=dllname+'\EXAM_10_1.dll'; //形成动态链接库文件名
ProcName:=FunName;
Hinst:=SafeLoadLibrary(Dllname);//加载动态链接库
if Hinst>0 then //加载成功
try
Fpointer:=GetProcAddress(HInst,ProcName);//得到要调用过程的地址
if Fpointer<>Nil then
begin
Myfunct:=TIntFunction(Fpointer);//形成函数名
Calculate:=Myfunct(x,y,z); //调用相应函数
end
else
showmessage('DLL Function not found.');
Finally
FreeLibrary(Hinst); //卸载动态链接库
end
else
ShowMessage(Dllname+' Library not Found');
end;
procedure TForm1.Button1Click(Sender: TObject);
Var
Funname:Pchar;//函数名
Res:integer; //调用动态链接库的结果
begin
Funname:='Max';
x:=strtoint(Edit1.text);
y:=strtoint(Edit2.text);
z:=strtoint(edit3.Text );
Res:=Calculate(FunName);
Edit4 .text:=IntTostr(Res) ;
end;
procedure TForm1.Button2Click(Sender: TObject);
Var
Funname:Pchar;
Res:Integer;
begin
Funname:='Min';
x:=strtoint(Edit1.text);
y:=strtoint(Edit2.text);
z:=strtoint(edit3.Text );
Res:=Calculate(FunName);
Edit4 .text:=IntTostr(Res) ;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -