如何在Exe和BPL插件中实现公共变量共享及窗口溶入技术Demo源码
1、Delphi编译方式介绍:
当我们在开发一个常规应用程序时,Delphi可以让我们用两种方式使用VCL,一种是把VCL中的申明单元及实现单元全部以静态编译的方式编译并链接进Exe可执行文件中,这样做的好处就是发布程序时只需要发布独立的可执行文件,当我们使用了的第三方DLL、OCX等时,无需发布*.bpl等文件,但EXE程序文件的体积会较大。
另外一种是把VCL库以运行时状态(即把VCL库中的申请单元静态编译进EXE可执行文件,而单元的实行方法则通过LoadLiabary/LoadPackage方法在程序运行时动态的载入内存)动态引入的方式,这种方式编译出来的程序容量比较小,但发布程序必须同时发布*.bpl,*.dll等文件。
Delphi默认情况下都是以第一种方式使用VCL,要设置程序以动态方式使用VCL,XE之前的版本可选择Project|Options|Packages,勾选 Build with runtime packages选项。在XE及之后的版本中则是在Packages|Runtime Packages>>Link with runtime packages处打勾,并在Runtime packages中加入*.dcp。如果要使用BPL包共享变量,则必须使用上面所说的第二种,所以本Demo程序要按第二种方式来设置。
//============================================================================================//
//共享BPL变量的要点:
// 要实现公共变量共享,调用者必须采用静态加载的方法加载公共bpl,在调用
// 者为BPL工程时直接在Requires中加入bplCommon.dcp公共包,而在调用
// 者为EXE时则是在Project|options|build with package的Requirs 加入 dcp,
// (在XE及之后的版本中则是在Packages|Runtime Packages>>Link with runtime packages处打勾,
// 并在Runtime packages中加入bplCommon.dcp)
// 否则公共包中的变量无法实现共享
//BPL包的调试:
// BPL可以调试,在run->parameters下指定主执行Exe程序即可,和正常的独立程序调试没有两样
//============================================================================================//
Delphi的编译方式还可参考此贴:点击打开链接
停靠技术(窗口融入)可参考博主的另一篇文章:点击打开链接,或者参考此贴:点击打开链接
2、运行时动态引入方法的设置(以XE2为例):
工程文件结构:
Link with runtime package设置:
加入BPL公共包:
Demo运行结果,在Exe中获取BPL公共包中StrVar1和IntVar1全局变量值的情况:
在Exe中调用bplForm.bpl包中ShowBplForm方法并融入RzPageControl中的情况:
在Exe中调用bplForm.bpl包中ShowModalBplForm方法并获取BPL公共包中StrVar1和IntVar1全局变量值的情况:
3、Demo源码下载