VCL揭密0.001版& Build 0.002--看起来有点象C++ Builder](100分)

  • 主题发起人 主题发起人 lewolf
  • 开始时间 开始时间
L

lewolf

Unregistered / Unconfirmed
GUEST, unregistred user!
VCL组件的库包BPL文件(Borland Package Library)是否能够向ActiveX一样,
在脱离任何辅助文件的情况下使用?也就是在没有相关的.h、.bpi和.lib等文
件的支持下,是否也能使用,答案是肯定的,甚至是不在IDE中也能够载入bpl
并创建其中的对象和使用之,作个简单的试验便知道,编制一个包含任意用户
组件的bpl,然后复制到另一个与之无关的C++ Builder环境中,IDE能够载入,
并且能够创建设计时对象,修改属性,但是程序不能编译通过,因为编译器需
要关于组件的预定义头文件。因此可以肯定bpl文件本身是完整的,它包含了所
有运行时需要的信息。

既然IDE可以载入并使用任意的bpl,那么用户也就可以设计一个程序动态的载
入并使用bpl库包。不幸的是Borland公司并没有公开这些信息和使用方法,即
便是在联机帮助中,也只是指出ClassInfo是共内部使用的……本程序是一个简
单的尝试,程序可以将任意的bpl载入并获取相关的ClassInfo,但并没有实现
从获取的ClassInfo中动态创建对象的功能。

最新的版本可以将任意用户使用C++ Builder5创建的pbl文件加载,并能够根据
pbl中的VCL信息动态创建对象,还没有提交,正在修改。

下载地址:http://www.csdn.net/cnshare/soft/16/16244.shtm

源代码只有400多行,一并提供。

新的版本也已经提交,为Build 0.002 代码1000多行,估计明天一早就可以在csdn下载。

各位网友,“VCL揭密”第二版“Build 0.002--看起来有点象C++ Builder”,已经提交,估计明天就可以下载。
在新的 Build 0.002 中:

实现了动态创建bpl中的VCL组件对象(以汇编实现) .
增加了About对话框。
扩展了 TClassCreateInfo 类用于记录注册的VCL组件信息
增加了编辑窗体,一个类似C++ Builder中的设计Form,有网格,可以将对象放在上面。
增加了用于观察被选择控件的Object Inspector,没有将属性编辑器注册,不能观察对象属性和事件的取值。
增加了修改对象ComponentState属性的方法(使用汇编实现)。
增加了选择动态创建对象的能力
可以使用鼠标拖动被选中的对象的属性控制点,来改变被选中对象的大小和位置等
It Just Looked Like C++ Builder。
 
Build 0.002 已经公布,下载地址:

http://www.csdn.net/cnshare/soft/16/16271.shtm

Just Looked Like C++ Builder
 
你认为动态加载BPL很难么?
 
Delphibbs.com
果然有高手,我并不是一个程序员,也不是作软件的,只是对C++ Builder感兴趣,
突然想到了这个问题就随手作作看。

正好有几个问题请教一下 wr960204 大虾:

在bpl文件中,如何判断他的单元是由C++编写的还是由Pascal编写的,在C++ Builder
中Pascal单元的头文件为.hpp,而C++的单元则为.h文件,我一直没有搞清楚。

在Pascal中和C++ Builder中class都可以有两个或者以上的构造函数,动态加载的bpl
库包只能从ClassInfo中获得相关的信息,我从system.pas中观察了一下,但是,这个
单元提供的TObject虚拟函数列表和实际运行的不太一致,最终我是使用的汇编语言调
用VCL组件的构造函数,但是按照TObject的虚拟函数列表只能取到一个构造函数的地址
那么其他的构造函数应该如何调用。

从ClassInfo数据中可以获得类的所有发布的属性、事件和方法,如何取得这些属性、事
件和方法的“值”。

我并不熟悉Delphi、也不会Pascal,希望 wr960204 大虾能够帮忙。
 
单纯的BPL格式在相同版本的Pascal和BCB之间没有什么分别。
你可以尝试一下,在BCB6中安装Delphi6的BPL在设计期间是没有问题的。
除非你要运行它,才会提示找不到头文件。所以相同版本Delphi和BCB产生的BPL格式
是没有差别的
 
namespace在delphi中和C++中不同,这是语言的差异,我观察过,输出的函数命名规则上
会有差异,不信你试试看一个bpk中包含一个C++的组件和一个Pascal的组件,生成的bpl
在C++ Builder的IDE中使用,生成的代码中头文件的名称是不同的(.h或.hpp)

呵呵。

我想你没有看明白我上面的三个问题,如果你会C++的话,可以到csdn下载VCL揭密,有源
代码,这三个问题是程序中还没有解决的。
 
lewolf你好,真为上面的过火言语后悔。在专研上我确实比您差多了。
我对BCB并不十分熟悉。现在给出你一个在Delphi下获得属性和事件的值的方法。
请您自行翻译成BCB。
Uses TYPInfo;

var
EditColor:Varinat;

EditColor:=GetPropValue(Edit1,'Color',False);//得到Edit1的COLOR属性值
SetPropValue(Edit1,'Color',clred);//设置Edit1的COLOR属性值
 
非常感谢 wr960204 提供代码,我会试试看,先送给你20分。
 
我也做了一个动态加载BPL的东东,不过和你的不太一样,
我没有用汇编。也没有用遍厉输出函数的方法来获得注册函数,功能是相同的。
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1687832
 

Similar threads

后退
顶部