如何制作插件

如何制作插件

ID:40822779

大小:25.45 KB

页数:13页

时间:2019-08-08

如何制作插件_第1页
如何制作插件_第2页
如何制作插件_第3页
如何制作插件_第4页
如何制作插件_第5页
资源描述:

《如何制作插件》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Delphi插件(Plug-ins)创建、调试与使用应用程序扩展关键词:Delphi控件杂项有没有使用过AdobePhotoshop?如果用过,你就会对插件的概念比较熟悉。对外行人来说,插件仅仅是从外部提供给应用程序的代码块而已(举个例子来说,在一个DLL中)。一个插件和一个普通DLL之间的差异在于插件具有扩展父应用程序功能的能力。例如,Photoshop本身并不具备进行大量的图像处理功能。插件的加入使其获得了产生诸如模糊、斑点,以及其他所有风格的奇怪效果,而其中任何一项功能都不是父应用程序自身所具有的。对于图像处理程序来说这

2、很不错,可是为什么要花偌大的力气去完成支持插件的商业应用程序呢?假设,我们举个例子,你的应用程序要产生一些报表。你的客户肯定会一直要求更新或者增加新的报表。你可以使用一个诸如ReportSmith的外部报表生成器,这是个不怎么样的解决方案,需要发布附加的文件,要对用户进行额外的培训,等等。你也可以使用QuickReport,不过这会使你身处版本控制的噩梦之中——如果每改变一次字体你就要Rebuild你的应用程序的话。然而,只要你把报表做到插件中,你就可以使用它。需要一个新的报表吗?没问题,只要安装一个DLL,下次应用程序启动时

3、就会看见它了。另外一个例子是处理来自外部设备(比如条形码扫描器)的数据的应用程序,为了给用户更多的选择,你不得不支持半打的各种设备。通过将每种设备接口处理例程写成插件,不用对父应用程序作任何变动就可以获得最大程度的可伸缩性。入门在开始写代码之前最重要的事情就是搞清楚你的应用程序到底需要扩展哪些功能。这是因为插件是通过一个特定的接口与父应用程序交互的,而这个接口将根据你的需要来定义。在本文中,我们将建立3个插件,以便展示插件与父应用程序相交互的几种方式。我们将把插件制作成DLL。不过,在做这项工作之前,我们得先制作一个外壳程序来

4、载入和测试它们。图1显示的是加载了第一个插件以后的测试程序。第一个插件没有完成什么大不了的功能,实际上,它所做的只是返回一个描述自己的字符串。不过,它证明了很重要的一点——不管有没有插件应用程序都可以正常运行。如果没有插件,它就不会出现在已安装的插件列表中,但是应用程序仍然可以正常的行使功能。我们的插件外壳程序与普通应用程序之间的唯一不同就在于工程源文件中出现在uses子句中的Sharemem单元和加载插件文件的代码。任何在自身与子DLL之间传递字符串参数的应用程序都需要Sharemem单元,它是DelphiMM.dll(De

5、lphi提供该文件)的接口。要测试这个外壳,需要将DelphiMM.dll文件从DelphiBin目录复制到path环境变量所包含的路径或者应用程序所在目录中。发布最终版本时也需要同时分发该文件。插件通过LoadPlugins过程载入到这个测试外壳中,这个过程在主窗口的FormCreate事件中调用,见图2。该过程使用FindFirst和FindNext函数在应用程序所在目录中查找插件文件。找到一个文件以后,就使用图3所示的LoadPlugins过程将其载入。{在应用程序目录下查找插件文件}procedureTfrmMain

6、.LoadPlugins;varsr:TSearchRec;path:string;Found:Integer;beginpath:=ExtractFilePath(Application.Exename);tryFound:=FindFirst(path+cPLUGIN_MASK,0,sr);whileFound=0dobeginLoadPlugin(sr);Found:=FindNext(sr);end;finallyFindClose(sr);end;end;{加载指定的插件DLL.}procedureTfrmMain.

7、LoadPlugin(sr:TSearchRec);varDescription:string;LibHandle:Integer;DescribeProc:TPluginDescribe;beginLibHandle:=LoadLibrary(Pchar(sr.Name));ifLibHandle<>0thenbeginDescribeProc:=GetProcAddress(LibHandle,cPLUGIN_DESCRIBE);ifAssigned(DescribeProc)thenbeginDescribeProc(D

8、escription);memPlugins.Lines.Add(Description);endelsebeginMessageDlg('File"'+sr.Name+'"isnotavalidplug-in.',mtInformation,[mbOK],0);end;en

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。