Delphi中如何能够动态地获取一个类的方法列表,并动态地访问该类的方法?(100分)

J

jifee

Unregistered / Unconfirmed
GUEST, unregistred user!
TypeInfo.pas中提供了可以访问VCL对象属性的例程,可以动态的获取一个类的属性列表,并可以根据属性名(字符串)动态访问属性。但对于对象的方法却找不到类似的例程!
换句话说,我需要类似这样的两个函数:
function GetMethodList(AObject:TObject):TStringList;
function CallMethod(AObject:TObject;MethodName:String;Parameters:TStringList):Boolean;
还望高手们不吝赐教!
 
Z

zmj71

Unregistered / Unconfirmed
GUEST, unregistred user!
<Delphi5.0开发人员指南>书中讲的很详细。
网上有电子版
 
J

jifee

Unregistered / Unconfirmed
GUEST, unregistred user!
[:)]好事做到底!
[red]那一页???[/red]
 
J

jifee

Unregistered / Unconfirmed
GUEST, unregistred user!
啊!不用了,总算找到了,看的头好晕!
原来gettypedata可以获知方法的参数列表!
但问题是如何通过方法的名称动态调用方法,如:
function CallMethod(AObject:TObject,MethodName:String;Parameters:Variant):Variant;
 

沙隆巴斯的主人

Unregistered / Unconfirmed
GUEST, unregistred user!
"gettypedata"这个方法在什么地方,我怎么没找到(D6)
 
Y

yxjdelphi

Unregistered / Unconfirmed
GUEST, unregistred user!
J

jifee

Unregistered / Unconfirmed
GUEST, unregistred user!
在Source/RTL/Common/TypInfo.pas
 
J

jifee

Unregistered / Unconfirmed
GUEST, unregistred user!
其实gettypedata也只不过能够获取方法类的参数列表,但仍然无法得到一个对象的方法列表.
Delphi中有一个TMethod对象,拥有Data和Code两个指针,但不知如何使用?
TObject也有一个GetMethodAddress方法,但是又如何通过指针访问方法呢?
动态调用DLL时可以通过方法指针(@Proc)访问DLL中的例程,但是VCL中同样的方法却不可以!
 
N

netwinds

Unregistered / Unconfirmed
GUEST, unregistred user!
TO jifee:

请教一下,如何可以知道DLL中的所有方法或函数的详细参数列表呢?如果DLL不是自己做的话!
 
J

jifee

Unregistered / Unconfirmed
GUEST, unregistred user!
有人能回答吗?
 

王寒松

Unregistered / Unconfirmed
GUEST, unregistred user!
老王好像能。 我正在做属性编辑器。
netwinds. 我主页论坛里有篇帖子是讨论你说的问题的。去看看
http://www.bj99.net/bbs/dispbbs.asp?boardID=14&amp;RootID=147&amp;ID=147&amp;page=1
 
C

Cash_HYJ

Unregistered / Unconfirmed
GUEST, unregistred user!
To netwinds:
你可以用Delphi导出它的TLB文件,那样你就可以知道该DLL的方法、属性和事件啦。
 
C

Cash_HYJ

Unregistered / Unconfirmed
GUEST, unregistred user!
To 大家:
我看你们是搞错了吧。单元文件是typinfo.pas,而不是typeinfo.pas;它是在DelphiX/Source/VCL/typinfo.pas。
 
Y

yxyyyy

Unregistered / Unconfirmed
GUEST, unregistred user!
D5 和D6是不同的,都没错
 
H

hpretty

Unregistered / Unconfirmed
GUEST, unregistred user!
好象这个东西在C#中做得好多了,
可以用指代来实现,
其实C#就是吸取了各种语言的优点,摒弃它们的缺点,然后就做出来一个既象
DELPHI又象C++又象Java,还有点象VB的简单
 
H

hpretty

Unregistered / Unconfirmed
GUEST, unregistred user!
好象这个东西在C#中做得好多了,
可以用指代来实现,
其实C#就是吸取了各种语言的优点,摒弃它们的缺点,然后就做出来一个既象
DELPHI又象C++又象Java,还有点象VB的简单
 
W

wk_knife

Unregistered / Unconfirmed
GUEST, unregistred user!
老王,我以前在你的论坛里注册过,是不是原来的数据都废了。
 
W

wk_knife

Unregistered / Unconfirmed
GUEST, unregistred user!
TMethod是用在窗体设计器中的,在IFormDesigner中用到。你看看吧,也许有用

 
W

wk_knife

Unregistered / Unconfirmed
GUEST, unregistred user!
IFormDesigner = interface(IDesigner)
['{ADDD444D-1B03-11D3-A8F8-00C04FA32F53}']
function CreateMethod(const Name: string
TypeData: PTypeData): TMethod;
function GetMethodName(const Method: TMethod): string;
procedure GetMethods(TypeData: PTypeData
Proc: TGetStrProc);
看上去很诱人!
 
J

jifee

Unregistered / Unconfirmed
GUEST, unregistred user!
IFormDesigner是DesignTime的概念,通过ToolsAPI访问Delphi的IDE,应该可以修改编辑窗中的方法实现代码,或通过代码获知方法的名称和参数。但毕尽还是DesignTime,我关心的是RunTime的问题!
 

Similar threads

顶部