Delphi 的 Dll 函数的 调用
一、Dll建立
(一)DLL项目的建立
library mydll;
uses
base in 'base.pas';
exports
Triple name 'Tr';
{$R *.res}
begin
end.
(二)函数单元
unit base;
interface
uses windows;
function Triple(N:integer):integer;stdcall;
implementation
function Triple(N:integer):integer;stdcall;
begin
result:=n*3;
end;
end.
二、静态调用
unit Unit1;
interface
uses
Windows, SysUtils, Controls, Forms,
StdCtrls, Classes;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
const
gdi32='mydll';
function triple(n:integer):integer;stdcall;external gdi32 name 'Tr';
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text:=inttostr(triple(10));
end;
end.
三、动态调用
unit Unit2;
interface
uses
Windows, SysUtils, Controls, Forms,
StdCtrls, Classes;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
type
Taddc=function(n:integer):integer;stdcall;//定义函数指针
var
Handle:Thandle;
addc:Taddc;
begin
Handle:=LoadLibrary('mydll.dll');//加载mydll
if Handle>32 then
begin
@addc:=GetProcAddress(Handle,'Tr'); //取Tr函数入口地址,大小写敏感。Tr为mydll中的Triple的exports 的name命名
if @a
相关文档:
常忘记,在此做笔记。
这几个函数都包含在StrUtils中,所以需要uses StrUtils;
假设字符串是 Dstr := ’Delphi is the BEST’, 那么
LeftStr(Dstr, 5) := ’Delph’
MidStr(Dstr, 6, 7) := ’ ......
这个本来我我在DELPHI盒子看到的,后来我对其作了一点修改,这里上全部代码,可以直接用
首先有两个自定的转换函数:
function myStrToHex(s:string):string; //字串转16进制
var
TmpStr:string;
i:integer;
begin
TmpStr:='';
for i:=1 to Length(s)do
TmpStr:=TmpStr+IntToHex(ord(s[i]),2);
Res ......
//加一下按钮,加一个对话框就OK啦
procedure TForm1.Button1Click(Sender: TObject);
var
S: String;
begin
if OpenDialog1.Execute then
begin
s := OpenDialog1.FileName;
WinExec( PChar(s), SW_NORMAL);
end;
end;
----------------------- ......