如何自制功能模块

本文介绍如何自制DLL功能模块,包括导出的函数接口、FunctionInfo结构定义、数据连接共享、功能图标设定及权限控制。通过设置正确的导出函数,主控程序能获取模块信息并调用其功能。Dll可以使用主控程序的数据连接,但功能的权限控制应由主控程序统一管理。此外,可以通过广播消息调用其他模块功能。
如何自制功能模块

功能模块是一个动态链接库(DLL)文件,功能模块DLL以相同的接口规范被主控程序调用。如果要自制功能模块 DLL 以扩展系统的功能,你的 DLL 应导出以下函数:
extern "C" __declspec(dllexport) AnsiString GetModuleName(); //导出模块名称
extern "C" __declspec(dllexport) AnsiString GetModule(); //导出模块说明
extern "C" __declspec(dllexport) int GetModuleID(); //导出模块ID
extern "C" __declspec(dllexport) AnsiString GetAuthor();//导出作者姓名
extern "C" __declspec(dllexport) int GetVerID();//导出版本代号
extern "C" __declspec(dllexport) AnsiString GetBuildDate(); //导出创建日期
extern "C" __declspec(dllexport) int GetFuncCount();//导出模块中的调用功能数
extern "C" __declspec(dllexport) bool GetFuncInfo(FuncInfo &Fi,int i); //导出第 i 个调用功能的信息
extern "C" __declspec(dllexport) void Run(int i,AnsiString Params); //带参数调用第 i 个功能
extern "C" __declspec(dllexport) bool UseConnection();//是否使用数据连接
extern "C" __declspec(dllexport) void SetConnection(TADOConnection *);//将主控程序的数据连接传入到 Dll 中。
extern "C" __declspec(dllexport) void SetMain(TApplication *App);//设置主程序

FunctionInfo是一个结构定义,你应该在 Dll 入口函数的前面定义它,定义语句如下:
typedef struct FunctionInfo
{
    char Caption[20];//标题,用于显示在菜单条上
    char Hite[100];//提示,用于显示在状态栏
    int SmallImageID;//小图标的资源 ID,0为无图标
    int LargeImageID;//大图标的资源 ID,0为无图标
}FuncInfo;
根据 Dll 中的功能数量,你需要为FunctionInfo结构创建一个变量或变量数组,同时将这个变量数组的元素数用GetFuncCount导出,以便让主控程序了解此 Dll 中共有多少个功能可供调用。主控程序将用 Dll 提供的 GetFuncInfo 函数遍历每个功能,以在主控程序中使用出相应的菜单条或按钮。当主控程序中相应的功能调用事件被激发时,将调用 Dll 的 Run 方法。

Dll 共享主控程序的数据连接

Dll 可以共享主控程序建立的数据连接,这时你应该把 UseConnection 导出为 True,同时导出 SetConnection 方法以便让主控程序将其 AdoConnection 传递给 Dll 使用。

为功能指定图标

你可以用不同的图标来表示 Dll 中的功能,要这样做,你先要建立一个资源文件,再为 Dll 添加此资源。
最后在 FunctionInfo 结构的功能信息对象中指定它大小图标的资源 ID,主控程序将在需要时读出这个资源使用。

功能的权限控制

功能的权限由主控程序统一管理,纳入系统管理的范围。如果功能模块作者想使用附加的权限控制,我们建议:

  1. 检查主控程序是否安全,有无假冒主控程序
  2. 不要使用主控程序的数据连接来实现,这只是增加了混乱和风险,并不能提高额外的安全性
模块功能的部署

所有加装的模块功能统一在主控程序中部署。主控程序的权限控制和用户界面自定义功能,实现模块在界面上的显示和布局控制,模块本身不必关心它的接口如何呈现给用户的,只要在主控程序调用了它的 Run 方法时能保证正常工作即可。主程序使用主菜单和基于PageControl的多页工具条来表现各功能,类似于BCB的IDE样式。

调用其它模块的功能

要在功能模块中调用其它模块 Dll 中的功能,可以广播一个专用的消息,主控程序将截获此消息,将根据消息的请示启动相应的功能模块。发送消息格式待定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值