📄 dcall1.pas
字号:
unit DCall1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
ComboBox1: TComboBox;
Label3: TLabel;
Edit2: TEdit;
Button1: TButton;
Button3: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
type
TintFunction=Function(arr:array of integer;n:integer):integer;stdcall;
var
arr:array[1..10] of integer;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
Randomize;
edit1.text:='';
for i:=1 to 10 do
begin
arr[i]:=Trunc(90*random+10);
edit1.text:=edit1.text+inttostr(arr[i])+','
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
Dllname:string;
Hinst:Thandle;
ProcName:Pchar;
Fpointer:TFarProc;
MyFunct:TintFunction;
k:integer;
begin
getdir(0,dllname);
dllname:=dllname+'\D_10_1.dll';
if ComboBox1.Text ='反序存放' then
ProcName:='Revert'
else if ComboBox1.Text ='选择法排序' then
ProcName:='SortSel'
else
ProcName:='SortBub';
Hinst:=SafeLoadLibrary(Dllname);
if Hinst>0 then
try
Fpointer:=GetProcAddress(HInst,ProcName);
if Fpointer<>Nil then
begin
Myfunct:=TIntFunction(Fpointer);
Myfunct(arr,10);
edit2.text:='';
for k:=1 to 10 do
begin
Edit2.Text :=Edit2.Text+inttostr(arr[k])+',';
end;
end
else
showmessage('DLL Function not found.');
Finally
FreeLibrary(Hinst);
end
else
ShowMessage(Dllname+' Library not Found');
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Application.Terminate ;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -