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事件循环优化异步代码?
如何在阿里云虚拟主机上快速搭建个人网站?

