php delphi编写的dll文件,Delphi 用DLL实现插件的简单实例

Delphi 用DLL实现插件的简单实例

这是DLL的代码

实现代码:

library MyDll;

uses

SysUtils,

Dialogs,

Classes;

procedure ShowInfo(info:PChar);stdcall;

begin

ShowMessage('您选择了【'+info+'】');

end;

function GetCaption:Pchar;

begin

Result := '中国';

end;

exports ShowInfo,

GetCaption;

{$R *.res}

begin

end.

这是调用窗体的代码

本例只使用了一个DLL,所以当有多个DLL时,需要循环DLL所在目录,依次加载DLL

unit Main;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Menus, ExtCtrls;

type

TShowInfo = procedure (info:PChar);stdcall;

TGetCaption = function : PChar;stdcall;

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

MainMenu1: TMainMenu;

Image1: TImage;

procedure Button2Click(Sender: TObject); private

{ Private declarations }

FHandel : THandle; //DLL句柄

FProAddress: Pointer; //DLL中ShowInfo的地址

showinfo: TShowInfo; //为动态加载DLL而设

procedure LoadPlusIn; //加载插件(DLL)

procedure ItemClick(Sender: TObject); //自定义菜单点击事件

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);

begin

LoadPlusIn;

end;

procedure TForm1.ItemClick(Sender: TObject);

begin

@showinfo := FProAddress; //取地址

if @showinfo <> nil then

showinfo(PWideChar(TMenuItem(Sender).Caption)); //执行DLL中的ShowInfo

end;

procedure TForm1.LoadPlusIn;

var

getcaption: TGetCaption;

item : TMenuItem;

begin

FHandel := LoadLibrary('MyDll.dll'); //加载

if FHandel = 0 then

begin

ShowMessage('加载失败!');

Exit;

end

else

begin

@getcaption := GetProcAddress(FHandel,'GetCaption'); //取DLL中GetCaption地址

if @getcaption <> nil then

begin

item := TMenuItem.Create(MainMenu1); //创建一个菜单

item.Caption := getcaption; //取Caption,即调用DLL中的GetCaption

FProAddress := GetProcAddress(FHandel,'ShowInfo'); //取得DLL中ShowInfo的地址

item.OnClick := ItemClick; //赋予菜单项的点击事件

MainMenu1.Items.Add(item); //添加到主菜单

end;

end;

end;

end.

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值