这是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 = 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实现插件的简单演示的更多相关文章

  1. ASP.NET MVC5 插件机制中插件的简单实现

    Autofac 依赖注入 ASP.NET MVC5 插件机制中插件的简单实现 一.前言 由于项目业务复杂,创建了多个插件并把他们放在了不同的项目中,项目使用AutoFac做的IOC:但是主项目可以注入 ...

  2. nice-validator表单验证插件的简单使用

    前言 前端表单校验是过滤无效数据.假数据.有毒数据的第一步,是数据安全的第一道关卡,虽然我们不能100%相信客户端提交的数据(真正的校验还得在服务端进行),但设置前端表单校验也是至关重要的,自己写逻辑 ...

  3. Xcode7使用插件的简单方法&&以及怎样下载到更早版本的Xcode

    Xcode7自2015年9上架以来也有段时间了, 使用Xcode7以及Xcode7.1\Xcode7.2的小伙伴会发现像VVDocumenter-Xcode\KSImageNamed-Xcode\HO ...

  4. 移动端全屏滑动的小插件,简单,轻便,好用,只有3k swiper,myswiper,page,stage

    https://github.com/donglegend/mySwiper mySwiper 移动端全屏滑动的小插件,简单,轻便,好用,只有3k 下载 直接下载 bower install mySw ...

  5. 数据统计表插件,highcharts插件的简单应用

    highcharts插件的简单应用,非常全能好用的一个数据统计表插件. $(function () { $('#container').highcharts({ chart:{ type:" ...

  6. Introspector(内省)简单演示样例 与 简单应用

    简单演示样例: package com.asdfLeftHand.test; import java.beans.BeanDescriptor; import java.beans.BeanInfo; ...

  7. JBoss 系列九十六:JBoss MSC - 简介及一个简单演示样例

    什么是 JBoss MSC JBoss MSC 即 JBoss Modular Service Container,是第三代 JBoss 产品 JBoss 7和WildFfly的内核,JBoss MS ...

  8. Thrift的安装和简单演示样例

    本文仅仅是简单的解说Thrift开源框架的安装和简单使用演示样例.对于具体的解说,后面在进行阐述. Thrift简述                                           ...

  9. 在VC6中基于dll开发插件用于各种图片显示(BMP/TGA/JPG/GIF/PNG/TIF/ICO/WMF/EMF/...)

    一.图片显示 图片显示的方法: 1.  直接写程序 2.  第3方库 3.  调用COM组件的IPicture接口 4.  使用MFC的CPictureHolder类 5.  使用GDI+的CImag ...

随机推荐

  1. 获取Map的key和value的两种方法

    //使用迭代器,获取key; /*Iterator<String> iter = map.keySet().iterator(); while(iter.hasNext()){ Strin ...

  2. Dalvik源码阅读笔记(二)

    DVM 类加载原理: DEX 文件加载到内存中 DvmDex 结构后,还没有完成类的解析工作,我们将 DEX 中的类填充到 ClassObject 结构的过程称为类加载. ClassObject 用来 ...

  3. 举例说明MySQL中的事务

    一.场景导入 现在有一张仓库表,仓库表中记录了每一个物品的数量,还有一张用户表,用户购买产品,仓库表的产品数量减少,而用户拥有产品的数量增加. 但是如果仓库中的产品数量不足时怎么处理? 例子: #仓库 ...

  4. shell脚本-预定义常量

    $0 这个程式的执行名字$n 这个程式的第n个参数值,n=1..9$* 这个程式的所有参数,此选项参数可超过9个.$# 这个程式的参数个数$$ 这个程式的PID(脚本运行的当前进程ID号)$! 执行上 ...

  5. [LeetCode&Python] Problem 551. Student Attendance Record I

    You are given a string representing an attendance record for a student. The record only contains the ...

  6. 测试那些事儿—Linux搭建环境基础步骤

    Linux搭建环境基础步骤 准备工具:SecureCRT工具(Linux工具,连接服务器)FTP传输工具(上传文件到服务器)MySQL连接工具 安装包(以下文件均为压缩包rpm格式和tar.gz):J ...

  7. Fedora瘦身

    启用的服务 systemctl list-unit-files --type=service | grep enabled 所有服务 systemctl list-unit-files --type= ...

  8. javascript json 判断项目 是否存在不存在插入foreach 组合 输出

    var a = []; var i; a.push({ key: "key1", value: 23 }); a.push({ key: "key2", val ...

  9. mongodb添加验证用户 删除用户

    1.创建用户 db.createUser( { user:<name_string>,                   #字符串 pwd:<password_string> ...

  10. MySQL--使用innodb_force_recovery修复数据库异常

    当MySQL服务异常重启失败后,可以通过配置参数innodb_force_recovery来对MySQL服务进行修复启动. 参数innodb_force_recovery选项: 1 (SRV_FORC ...