如何在程序中动态生成自己的新类?(不是新对象)(200分)

  • 主题发起人 主题发起人 Passion
  • 开始时间 开始时间
P

Passion

Unregistered / Unconfirmed
GUEST, unregistred user!
比如说我定义了一个TXXXX1,现在想要动态生成一个类TXXXX2,(两者可以没有联系)
这个TXXXX2在源码中没有定义,需要动态生成它。即使是个最简单的类都行。
需要RegisterClass(TXXXX2)能通过,或者能TXXXX2.Create通过。
用TClass来操作能行吗?
 
还没人回答就被淹没了,提前一下。
 
似乎通常的方法不大好做,关注。
Delphi都实现构建类的。
 
to Passion,我喜欢这个问题,我要想一段时间

兄弟,你上回,答应补分给我,怎么还没开贴????
 
好像不能实现
比如,你能动态创建一种新的数据类型吗(例如程度为4的整型等)
 
有这个必要吗/?
而且好像很难.

可以先create一个纯的基类,.............自己写写看在说
 
一般放置在程序运行部分的上面如下:
procedure TForm1.Button1Click(Sender: TObject);
type
a=type integer;
var
b:a;
begin
b:=100;
end;
类型可以修改为你自己需要的
 
原始对象类型应该首先声明才能够重新定义,我觉得你要实现的东西的确没有什么用处的
 
PASSION兄,看到你的问题了,呵呵
哎,我觉得你应该先研究下DELPHI里面类的RTTI的结构,然后手工在内存中构造出这么一段区域来,然后用ASM来调用REGISTERCLASS,类本身就是个数据结构地址而已嘛
同意不?
 
wxjh2001定义的是一个已说明的,
能不能象第个单元开始的type中部分一样声明?
 
具体一些,你要实现什么功能,说得太笼统了
 
TPersistentClass = class of TPersistent;

.....
var
AClass:TPersistentClass ;
.....
RegisterClass(AClass);
 
手工在内存中编制一个类结构应该不太困难,只是很麻烦,要替换 vmt 负方向的一些指针。RegisterClass 也应该可以实现。
只是,没有类的定义,编译器不能生成正确的成员函数调用代码。对于静态的构造函数如 TObject.Create,编译器生成了固定的地址,因此不可能改动。那么只有改写虚 Create 构造函数的 vmt 指针,欺骗编译器。即使这样实现了意义也不大,因为还是必须基于某个类如(TComponent) 的 TClass 类型进行改写。
 
没有意义
在Delphi里边类是为了封装,其实就是一段数据和一堆代码而已。动态生成有什么意义?
真的需要,那么通过 BPL+动态加载/卸载 是最好的
 
结帖了,补上delp兄以前少给的分,如果不够,再告诉我一声。
当初发这个贴的目的是想研究研究,虽然意义不大。
 
后退
顶部