如何在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

如何在Exe和BPL插件中实现公共变量共享及窗口溶入技术Demo源码的更多相关文章

  1. Android源码浅析(四)——我在Android开发中常用到的adb命令,Linux命令,源码编译命令

    Android源码浅析(四)--我在Android开发中常用到的adb命令,Linux命令,源码编译命令 我自己平时开发的时候积累的一些命令,希望对你有所帮助 adb是什么?: adb的全称为Andr ...

  2. (转)Java中的String为什么是不可变的? -- String源码分析

    背景:被问到很基础的知识点  string  自己答的很模糊 Java中的String为什么是不可变的? -- String源码分析 ps:最好去阅读原文 Java中的String为什么是不可变的 什 ...

  3. Java中常用的七个阻塞队列第二篇DelayQueue源码介绍

    Java中常用的七个阻塞队列第二篇DelayQueue源码介绍 通过前面两篇文章,我们对队列有了了解及已经认识了常用阻塞队列中的三个了.本篇我们继续介绍剩下的几个队列. 本文主要内容:通过源码学习De ...

  4. 在网站开发中很有用的8个 jQuery 效果【附源码】

    jQuery 作为最优秀 JavaScript 库之一,改变了很多人编写 JavaScript 的方式.它简化了 HTML 文档遍历,事件处理,动画和 Ajax 交互,而且有成千上万的成熟 jQuer ...

  5. 源码来袭!!!基于jquery的ajax分页插件(demo+源码)

    前几天打开自己的博客园主页,无意间发现自己的园龄竟然有4年之久了.可是看自己的博客列表却是空空如也,其实之前也有写过,但是一直没发布(然而好像并没有什么卵用).刚开始学习编程时就接触到博客园,且在博客 ...

  6. 转:在网站开发中很有用的8个 jQuery 效果【附源码】

    原文地址:http://www.cnblogs.com/lhb25/p/amazing-jquery-effects.html jQuery 作为最优秀 JavaScript 库之一,改变了很多人编写 ...

  7. Android 自定义View及其在布局文件中的使用示例(三):结合Android 4.4.2_r1源码分析onMeasure过程

    转载请注明出处 http://www.cnblogs.com/crashmaker/p/3549365.html From crash_coder linguowu linguowu0622@gami ...

  8. 关于 Eclipse中的Web项目 部署的文件位置 查看jsp源码的部署位置

    使用 eclipse 开发web项目 会默认 部署在 工作目录下: .metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps 在这里 ...

  9. WinForm中使用DDE技术(含源码)

    提起DDE技术,相信很多人不知道是啥东东,尤其是90后的程序员们.不过,有时候这个东西还是有用处的,用一句话可以总结:实现Winform程序间的通信.比如:两个Winform程序A和B需要实现通信,用 ...

随机推荐

  1. 深入理解C++中的mutable关键字

      mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词. 在C++中,mutable也是为了突破const的限制而设置的.被mutable修饰的变量,将 ...

  2. javascript调试 console

    Console命令详解,让调试js代码变得更简单   Firebug是网页开发的利器,能够极大地提升工作效率. 但是,它不太容易上手.我曾经翻译过一篇<Firebug入门指南>,介绍了一些 ...

  3. View绘制详解,从LayoutInflater谈起

    自定义View算是Android开发中的重中之重了,很多小伙伴可能或多或少都玩过自定义View,对View的绘制流程也有一定的理解.那么现在我想通过几篇博客来详细介绍View的绘制流程,以便使我们更加 ...

  4. newusers和chpasswd

    一.为什么需要大批量添加用户: 我们什么时候才需要大批量添加用户呢?有时我们需要让几十个或更多的用户在主机上完成相同或相似的任务,比如我们想同时添加一堆的ftp 用户,这些ftp用户归属同一组,但不允 ...

  5. LC-检索

    line void LC(tree T,float cost) { //为找一个答案结点检索T if(T是答案结点) {输出T:return:} E=T: //E-结点 将活结点表初始化为空: ) { ...

  6. 小米2s 用线刷,刷回MIUI V5了

    1. 在使用MiFlash刷机时,出现了:FAILED (remote: partition table doesn't exist) 参考了:[经验技巧]如果你合并分区后悔了,那么我有最简单的方法恢 ...

  7. Android, JSONLIB , java.lang.NoClassDefFoundError: Failed resolution of: Lnet/sf/json/JSONArray; 原因

    出现这个错误的原因是因为引用的lib库的V4包与程序的V4包不兼容,替换成一致的包就OK了

  8. MySQL 세자리 마다 콤마 찍기

    MySQL에서 세자리 마다 콤마를 찍으려면 FORMAT 함수를 이용하시면 됩니다. FORMAT( 컬럼명, 소수점이하 자리수 ) 여기서 컬럼의 자료형이 varchar와 같은 문자형이 ...

  9. gluster 安装配置基本指南

    基于网络上的多篇文章,做了一些调整. gluster安装 ###  Installing Gluster wget -P /etc/yum.repos.d http://download.gluste ...

  10. 以 280W 数据为依据。对比SQL2008 表分区前和分区后的 T_SQL 效率

    一: 数据库的优化一直项目后期的重中之重,特别是当单表数据庞大到1000W时候.各种SQL语句执行效率都会慢很多.SQL 效率 与索引,行数据,列数据,以及Where 刷选字段类型 (效率 整数型大于 ...