如何在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为例):

工程文件结构:

如何在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源码下载

 ​

 


谢祥选【小宇飞刀(xieyunc)】