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

时间: 2024-10-11 21:51:44

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

Java开源生鲜电商平台-OMS订单系统中并发问题和锁机制的探讨与解决方案(源码可下载)

Java开源生鲜电商平台-OMS订单系统中并发问题和锁机制的探讨与解决方案(源码可下载) 说明:Java开源生鲜电商中OMS订单系统中并发问题和锁机制的探讨与解决方案: 问题由来     假设在一个订单系统中(以火车票订单系统为例),用户A,用户B都要预定从成都到北京的火车票,A.B在不同的售票窗口均同时查询到了某车厢卧铺中.下铺位有空位.用户A正在犹豫订中铺还是下铺,这时用户B果断订购了下铺.当用户A决定订下铺时,系统提示下铺已经被预订,请重新选择铺位.在这个系统场景中,我们来探讨一下,火车票

基于jquery的ajax分页插件(demo+源码)

前几天打开自己的博客园主页,无意间发现自己的园龄竟然有4年之久了.可是看自己的博客列表却是空空如也,其实之前也有写过,但是一直没发布(然而好像并没有什么卵用).刚开始学习编程时就接触到博客园,且在博客园学习了很多的知识,看过很多人的分享.说来也惭愧,自己没能为园友们分享自己的所学所得(毕竟水平比较差). 过去的一年也是辗转了几个城市换了几份工作(注定本命年不太平?).八月份来到现在所在的公司(OTA行业),公司是做互联网的,所以可能大家的前端都屌屌的?之前一直从事.NET开发(现在在这边也是),

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

jQuery 作为最优秀 JavaScript 库之一,改变了很多人编写 JavaScript 的方式.它简化了 HTML 文档遍历,事件处理,动画和 Ajax 交互,而且有成千上万的成熟 jQuery 插件可供使用.看看下面这些惊人的功能和效果,我相信你会发现一些很有用的东西. 基于 jQuery 实现的 Ajax 异步分页 jPages 是一款非常不错的客户端分页插件,有很多特色,例如自动播放.按键翻页.延迟加载等等 源码下载      在线演示 老牌的响应式 jQuery 幻灯片效果 Sl

Eclipse中Jar包的反编译(通过jar包查看源码)

很多时候我们在公司工作时,在Eclipse引用其他人封装好的jar包时是看不到源码的,这样一来就不能很好得理解他人的意图,于是就需要借助反编译的帮助了.好了,下面是反编译的正确使用方法. 一.下载net.sf.jadclipse_3.3.0.jar并将其放入Eclipse文件夹下的plugins文件夹中 二.将Eclipse文件夹下的configuration文件夹下的org.eclipse.update文件夹删除 三.下载jad.exe将其放到Eclipse文件夹下 四.打开Eclipse,点

C#中Queue<T>类的使用以及部分方法的源码分析

Queue<T>类 表示对象的先进先出集合. 队列在按接收顺序存储消息方面非常有用,以便于进行顺序处理. 存储在 Queue,<T> 中的对象在一端插入,从另一端移除. Queue<T> 的容量是 Queue<T> 可以包含的元素数. 当向 Queue<T> 中添加元素时,将通过重新分配内部数组来根据需要自动增大容量. 可通过调用 TrimExcess 来减少容量. Queue<T> 接受 null 作为引用类型的有效值并且允许有重复

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

使用 eclipse 开发web项目 会默认 部署在 工作目录下: .metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps 在这里 我的工作目录是 F:\work 所以 web的项目 部署的位置应该是: F:\work\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps 在使用jsp 的时候 需要查看 jsp的 对应 Servlet 源码 需要查看 .m

java中break和continue的区别详解(附源码)

序言 在自己学习java语言的过程中,很容易把break和continue的用法混淆.为了便于以后快速查阅及温习,在此特留学习笔记一份. 简述 在任何迭代语句的主体部分,都可以用break和continue控制循环的流程.其中,break用于强行退出循环,不执行循环中剩余的语句.而continue则停止执行当前迭代,然后退回循环起始处,开始下一次迭代. 源码 下面这个程序向大家展示了break和continue在for和while循环中的例子: package com.mufeng.thefou

Java中的String为什么是不可变的? -- String源码分析

转:http://blog.csdn.net/zhangjg_blog/article/details/18319521 什么是不可变对象? 众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的.不能改变状态的意思是,不能改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变. 区分对象和对象的引用 对于Ja

word2vec 中的数学原理详解(六)若干源码细节

  word2vec 是 Google 于 2013 年开源推出的一个用于获取 word vector 的工具包,它简单.高效,因此引起了很多人的关注.由于 word2vec 的作者 Tomas Mikolov 在两篇相关的论文 [3,4] 中并没有谈及太多算法细节,因而在一定程度上增加了这个工具包的神秘感.一些按捺不住的人于是选择了通过解剖源代码的方式来一窥究竟,出于好奇,我也成为了他们中的一员.读完代码后,觉得收获颇多,整理成文,给有需要的朋友参考. 相关链接 (一)目录和前言 (二)预备知