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


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

    bplTest_Demo.rar



  • 相关阅读:
    NYOJ 815 三角形【海伦公式】
    HTTP Status 500
    C++继承中析构函数 构造函数的调用顺序以及虚析构函数
    Android学习JNI,使用JNI实现字符串加密
    HDU 4749 Parade Show(暴力水果)
    更换oracle 集群网卡(Changing a Network Interface)
    MongoDB数据模型和索引学习总结
    公司中午不能午休规定后的解决措施
    OC中使用UI自己定义控件实现计算器的设计(版本号1简单的加减乘除,连加,连减,连除,连乘)
    【JavaScript】——JS入门
  • 原文地址:https://www.cnblogs.com/xieyunc/p/4438261.html
Copyright © 2020-2023  润新知