DLL及在delphi中调用方式

一.隐式调用.

    library Project1;
uses
  SysUtils,
  Classes;

{$R *.res}
function sum(a,b:Integer):Integer;stdcall;
begin
  Result := a+b;
end;

function linkstr(str1,str2:PChar):PChar;stdcall;
begin
  result :=PChar(StrPas(str1)+strpas(str2));
end;

function ifcheck(int1,int2:Integer):Boolean;stdcall;
begin
  if int1>int2 then
  Result:=True
  else
  Result:=False;
end;
exports
 sum,linkstr,ifcheck;

begin

end.

=================

var
  Form1: TForm1;

implementation
function sum(a,b:integer):Integer;      stdcall; external 'Project1.dll';
function linkstr(str1,str2:PChar):PChar;stdcall; external 'project1.dll';
function ifcheck(int1,int2:Integer):Boolean;stdcall;external 'project1.dll';

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Self.Caption:=IntToStr(sum(StrToInt(edt1.Text),StrToInt(edt2.Text)));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Self.Caption:=StrPas(linkstr(PChar(edt1.Text),PChar(edt2.Text)));
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  if ifcheck(StrToInt(edt1.Text),StrToInt(edt2.Text)) then
  Self.Caption:='数一大于数二'
  else
  Self.Caption:='数二大于数一';
end;

end.

//------------------------------------------------------------------------------------

二.显未调用.

procedure TForm1.Button1Click(Sender: TObject);
var
  hdll:HMODULE;
  sum:function(a,b:integer):Integer;stdcall;
begin
  hdll:=LoadLibrary('project1.dll');
  if hdll <> 0 then
  begin
    @sum :=GetProcAddress(hdll,'sum');
    if @sum <> nil then
    self.Caption:=IntToStr(sum(StrToInt(edt1.Text),strtoint(edt2.Text)))
    else
    ShowMessage('DLL中该功能不存在');
    FreeLibrary(hdll);
    end
    else
    ShowMessage('无法加载DLL');
end;

 


//end;

procedure TForm1.Button2Click(Sender: TObject);
var
  hdll:HMODULE;
  linkstr:function(str1,str2:pchar):PChar;stdcall;
begin
  hdll:=LoadLibrary('project1.dll');
  if hdll<>0 then
  begin
    @linkstr:=GetProcAddress(hdll,'linkstr');
    if @linkstr<> nil then
      Self.Caption:=StrPas(linkstr(PChar(edt1.text),pchar(edt2.text)))
    else
    ShowMessage('dll中模块函数加载不成功');
    FreeLibrary(hdll);
    END
  else
ShowMessage('DLL加载不成功');

end;

procedure TForm1.Button3Click(Sender: TObject);
var
  hdll:HMODULE;
  ifcheck:function(a,b:integer):Boolean;stdcall;
begin
  hdll:=LoadLibrary('project1.dll');
  if hdll<>0 then
  begin
    @ifcheck:=GetProcAddress(hdll,'ifcheck');
    if @ifcheck<>nil then
       if ifcheck(StrToInt(edt1.text),StrToInt(edt2.Text)) then
       Self.Caption:='数一大于数二'
       else
       Self.Caption:='数二大于数一'
    else
    ShowMessage('加载函数时出错');
  FreeLibrary(hdll);
  END
else
ShowMessage('加载DLL时出错');

end;

end.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15678730/viewspace-586840/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/15678730/viewspace-586840/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值