用DLL实现插件的简单演示
2009-10-27 13:57
253 查看
这是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.
相关文章推荐
- 用DLL实现插件的简单演示
- Delphi 用DLL实现插件的简单实例
- 五滴水:使用Ajax+jQuery来实现前端收到的数据在console上显示+简单的主页设计与bootstrap插件实现图片轮播
- 简单实现的JQuery文本框水印插件
- 简单测试实现 博客园的头像上传功能 使用插件jquery jcrop+fineupload
- 一个简单的jQuery插件ajaxfileupload实现ajax上传文件例子
- 深入浅出Dll(介绍函数导出、类导出、钓子dll、不同语言混合编程方法、插件等的实现方法) 选择自 iceezone 的 Blog
- JS简单实现文件上传(无需插件)
- 简单利用HUDText插件实现血条和怪物伤害减血效果
- 自已实现的简单jQuery分页插件
- Autofac 依赖注入 ASP.NET MVC5 插件机制中插件的简单实现
- 多功能jQuery树插件zTree实现权限列表简单实例
- Delphi插件管理框架的简单实现
- 非常简单的使用jquery fancybox插件实现的查看图片效果
- WPF插件开发简单实现
- 深入浅出Dll(介绍函数导出、类导出、钓子dll、不同语言混合编程方法、插件等的实现方法)
- jQuery插件简单实现方法
- jquery中实现简单的tabs插件功能的代码
- SpringMVC+MyBatis分页插件简单实现
- 简单的Easytabs插件,实现Tab在左侧显示