CSDN博客

img wangyunyong0905

D2009反射?新功能还是骗局?

发表于2008/10/3 20:10:00  557人阅读

分类: DELPHI

说这个问题前,请大家先参考李维先生的文章:《Tiburon遊記3 動手建立一個DataSnap JSON伺服器吧》
http://gordonliwei.spaces.live.com/blog/cns!CCE1F10BD8108687!2365.entry

文章中明确的说了,“對於需要輸出服務給用戶端的類別,資料模組或是遠端資料模組,必須使用新的編譯器指令{$MethodInfo ON}和{$MethodInfo OFF}包圍類別宣告。”

MethodInfo开关真的是新的编译器指令吗?前天我的论坛上出现一个关于D2009的元信息的讨论,也暴出了这个秘密,帖子见链接:http://mydelphi.5d6d.com/thread-888-1-1.html
肥猫兄已经证实了Delphi7也能使用MethodInfo指令,而且也有ObjAuto这个单元的存在!

我特地去看了一下,的确,Delphi7和Delphi2007下都有ObjAuto.pas,只不过有些内容与Delphi2009的不同。

把http://hi.baidu.com/rarnu/blog/item/faba6f63bb1dd7660c33fa97.html这篇文章的代 码拷到Delphi7中,编译运行,得到的结果与Delphi2009相同。也就是说,Delphi7也可以使用反射机制,编译器早就支持了。也就是说 Delphi2009的反射特性,实际上是早就存在的。也不像李维先生说的那样,是一个新的编译指令。

对于ObjAuto.pas的一些不同之处,可以用Delphi2009的同名文件来代替,然后略作修改,即可使老版本的Delphi也实现Delphi2009的反射机制。换言之,编译器上未对“反射”作修改,这是早已有的功能。代码如下:

procedure TForm1.FormCreate(Sender: TObject);
var
mi : TMethodInfoArray;
mih: PMethodInfoHeader;
begin
mi := Objauto2009.GetMethods(TTestCall);
for mih in mi do
begin
    ListBox1.Items.Add(mih^.Name);
end;
end;

在我的论坛上,我提供了修改的ObjAuto.pas,用于在Delphi7至Delphi2007各个版本下,实现Delphi2009的反射功能,此处下载:http://mydelphi.5d6d.com/thread-917-1-1.html

在此,我不禁要问,Borland/CodeGear到底在想什么?早就应该告诉用户有这些功能,为什么到了现在才说?还把它当成Delphi2009的新功能呢?
0 0

相关博文

我的热门文章

img
取 消
img