如何在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程序即可,和正常的独立程序调试没有两样    
//============================================================================================//


2、运行时动态引入方法的设置(以XE2为例):

工程文件结构:

如何在Exe和BPL插件中实现公共变量共享及窗口溶入技术Demo源码_静态编译

Link with runtime package设置:

如何在Exe和BPL插件中实现公共变量共享及窗口溶入技术Demo源码_静态编译_02

加入BPL公共包:

如何在Exe和BPL插件中实现公共变量共享及窗口溶入技术Demo源码_全局变量_03

Demo运行结果,在Exe中获取BPL公共包中StrVar1和IntVar1全局变量值的情况:

如何在Exe和BPL插件中实现公共变量共享及窗口溶入技术Demo源码_可执行文件_04

在Exe中调用bplForm.bpl包中ShowBplForm方法并融入RzPageControl中的情况:

如何在Exe和BPL插件中实现公共变量共享及窗口溶入技术Demo源码_静态编译_05

在Exe中调用bplForm.bpl包中ShowModalBplForm方法并获取BPL公共包中StrVar1和IntVar1全局变量值的情况:

如何在Exe和BPL插件中实现公共变量共享及窗口溶入技术Demo源码_可执行文件_06

3、Demo源码下载

​bplTest_Demo.rar​