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

发布时间 - 2026-01-11 03:05:12    点击率:

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. 

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


# Delphi  # 用DLL实现插件的实例  # 用DLL实现插件的演示  # Delphi 根据字符串找到函数并执行的实例  # Delphi 中内存映射对于大文件的使用  # Delphi提取PDF文本实例  # Delphi XE5 为Android应用制作签名的方法(图文)  # ListView 百分比进度条(delphi版)  # Delphi实现截屏存盘的方法  # Delphi实现窗体感知鼠标滑过并自动隐藏与显示窗口的方法  # Delphi 实现软件自动升级的功能  # 加载  # 这是  # 多个  # 句柄  # 如有  # 希望能  # 自定义  # 谢谢大家  # 创建一个  # 中国  # 本例  # 菜单项  # 疑问请  # 选择了  # 使用了  # Pchar  # exports  # res  # Result  # Forms 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何处理异常和错误?(Handler示例)  Laravel如何使用Collections进行数据处理?(实用方法示例)  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  创业网站制作流程,创业网站可靠吗?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  微信小程序 canvas开发实例及注意事项  如何为不同团队 ID 动态生成多个非值班状态按钮  Laravel如何实现事件和监听器?(Event & Listener实战)  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  微信小程序 input输入框控件详解及实例(多种示例)  Linux系统命令中screen命令详解  如何快速搭建自助建站会员专属系统?  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  如何确保西部建站助手FTP传输的安全性?  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  如何用wdcp快速搭建高效网站?  Laravel如何自定义分页视图?(Pagination示例)  JavaScript模板引擎Template.js使用详解  ,怎么在广州志愿者网站注册?  详解Huffman编码算法之Java实现  如何用景安虚拟主机手机版绑定域名建站?  如何在万网ECS上快速搭建专属网站?  Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】  Python3.6正式版新特性预览  Laravel distinct去重查询_Laravel Eloquent去重方法  Laravel如何处理表单验证?(Requests代码示例)  网站制作企业,网站的banner和导航栏是指什么?  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  如何快速生成专业多端适配建站电话?  Laravel如何配置和使用缓存?(Redis代码示例)  QQ浏览器网页版登录入口 个人中心在线进入  iOS发送验证码倒计时应用  如何用VPS主机快速搭建个人网站?  Linux安全能力提升路径_长期防护思维说明【指导】  如何在 React 中条件性地遍历数组并渲染元素  网站制作报价单模板图片,小松挖机官方网站报价?  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  网站建设要注意的标准 促进网站用户好感度!  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  JavaScript如何实现路由_前端路由原理是什么  Laravel如何使用Eloquent进行子查询  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  Angular 表单中正确绑定输入值以确保提交与验证正常工作  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  如何在阿里云虚拟主机上快速搭建个人网站?