全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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. 

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


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


相关文章:   如何在Golang中指定模块版本_使用go.mod控制版本号  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  如何制作算命网站,怎么注册算命网站?  香港服务器选型指南:免备案配置与高效建站方案解析  存储型VPS适合搭建中小型网站吗?  个人网站制作流程图片大全,个人网站如何注销?  代购小票制作网站有哪些,购物小票的简要说明?  如何快速查询域名建站关键信息?  如何注册花生壳免费域名并搭建个人网站?  c# await 一个已经完成的Task会发生什么  小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?  网站设计制作企业有哪些,抖音官网主页怎么设置?  如何高效配置IIS服务器搭建网站?  nginx修改上传文件大小限制的方法  seo网站制作优化,网站SEO优化步骤有哪些?  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  官网网站制作腾讯审核要多久,联想路由器newifi官网  如何解决ASP生成WAP建站中文乱码问题?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  制作电商网页,电商供应链怎么做?  如何快速生成高效建站系统源代码?  定制建站方案优化指南:企业官网开发与建站费用解析  企业微网站怎么做,公司网站和公众号有什么区别?  建站之星会员如何解锁更多建站功能?  沈阳制作网站公司排名,沈阳装饰协会官方网站?  如何确保FTP站点访问权限与数据传输安全?  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  网站制作网站,深圳做网站哪家比较好?  招贴海报怎么做,什么是海报招贴?  香港服务器网站推广:SEO优化与外贸独立站搭建策略  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  如何通过服务器快速搭建网站?完整步骤解析  C++时间戳转换成日期时间的步骤和示例代码  h5在线制作网站电脑版下载,h5网页制作软件?  红河网站制作公司,红河事业单位身份证如何上传?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  建站VPS选购需注意哪些关键参数?  文字头像制作网站推荐软件,醒图能自动配文字吗?  ,sp开头的版面叫什么?  如何快速查询网站的真实建站时间?  如何通过远程VPS快速搭建个人网站?  定制建站策划方案_专业建站与网站建设方案一站式指南  制作门户网站的参考文献在哪,小说网站怎么建立?  如何快速重置建站主机并恢复默认配置?  天津个人网站制作公司,天津网约车驾驶员从业资格证官网?  建站之星CMS五站合一模板配置与SEO优化指南 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。