说这个问题前,请大家先参考李维先生的文章:《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的新功能呢?
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的新功能呢?