以下是简单测试用例:
procedure TForm1.Button1Click(Sender: TObject);
var
aLabel: string;
i: Integer;
aPointer: pointer;
aObj: TObject;
begin
for i := 0 to aClassList.Count - 1 do begin
if aClassList.Items[i].ClassName = Edit1.Text then begin
aObj := aClassList.Items[i].Create;
aPointer := TComponent(aObj).MethodAddress(aObj.ClassName);
//...
break;
end;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
aClassList := TClassList.Create;
aClassList.Add(TLabel);
end;
上面代码实现了动态根据字符串创建相应同名类的对象,但如何能通过其VMT访问到方法呢?该问题可用于COM+三层结构中动态创建自定义的类对象,以及根据对象方法(也是字符串)调用实际的对象方法,各位大虾请多多帮忙,万分感谢!!!
不吝送分!!!!!
procedure TForm1.Button1Click(Sender: TObject);
var
aLabel: string;
i: Integer;
aPointer: pointer;
aObj: TObject;
begin
for i := 0 to aClassList.Count - 1 do begin
if aClassList.Items[i].ClassName = Edit1.Text then begin
aObj := aClassList.Items[i].Create;
aPointer := TComponent(aObj).MethodAddress(aObj.ClassName);
//...
break;
end;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
aClassList := TClassList.Create;
aClassList.Add(TLabel);
end;
上面代码实现了动态根据字符串创建相应同名类的对象,但如何能通过其VMT访问到方法呢?该问题可用于COM+三层结构中动态创建自定义的类对象,以及根据对象方法(也是字符串)调用实际的对象方法,各位大虾请多多帮忙,万分感谢!!!
不吝送分!!!!!
解决方案 »
- 我用ADO连数据库,怎么提示from子句出错?
- 多线程同时往一个文件里写数据需不需要进行同步?
- 结束不了进程?
- 请问怎样知道文件的长度
- 关于SQL SERVER2000 C/S结构客户端访问服务器端数据的问题
- 关于报表的列数
- 请问:调用QuickRep.PreviewModel这个方法后,关闭其拥有者时,报系统错误“无效的窗体句柄”。(并不是所有的这类应用都报,有几个不报,
- For: 中秋佳节还在异乡流浪的兄弟姊妹
- 还是关于Datetime格式输入的问题!
- 怎样将VCLZIP组件放入定制的ASP组件中!
- 经举报:ID: skolay 、 dvrlord 有倒分嫌疑,等候处理。
- delphi5中QReport中的几乎所有控件突然消失,而且无法重新安装这些控件,怎办?
要是我想创建一个TForm类型的对象,aObj := aClassList.Items[i].Create这一句没有Create方法需要的参数啊?
关于根据字符串调用方法,我想采用“方法工厂”,不知是否有人认同
这一句可以创建吗?
如果可以, 这样调用一些公共函数:
if (aObj is TClass1 ) then TClass1(aObj).Func..
else if (aObj is TClass2 ) then TClass2(aObj).Func..
.....如果需要动态创建的类型都知道,可能很多,也可以这么干.
如果都是同一父类,且只是需要调用一些继承方法 . 直接转换成父类调用
今天下午结贴,有关注的请再次发表高见,谢谢。