码迷,mamicode.com
首页 > 其他好文 > 详细

MakeObjectInstance的关键理解

时间:2014-11-20 18:39:24      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   sp   for   strong   

昨天把MakeObjectInstance的代码详细研究了一下,当然还有众多前辈高手们的帮助,终于大致搞明白了是怎么回事。但是给我顿悟的,不是高手们的帖子,而是来自我自己的一个疑惑,TObjectInstance这么小,一共才13个字节,显然不可能存储整个MainWndProc的函数内容,更不用说WndProc函数的内容,只能存储它们的地址。也不可能把窗口函数的内容拆散了放在不同的TObjectInstance里,那样虽然可以,但是何不把TObjectInstance设计的大一些呢,设计VCL代码的都是高手中的高手,不可能犯这样的低级错误。正是从这一点出发,我明白了,MakeObjectInstance函数不过是换种方式调用MainWndProc,而不是把MainWndProc的内容整个存储在MakeObjectInstance建立的区块里(我一直以来就是这么认为的),每个TObjectInstance小区块最终记住的是每个Delphi类(比如TButton)的MainWndProc函数地址,外加跳转语句。

与之而来的推论是,TInstanceBlock建立了314个小区块TObjectInstance的列表第一个小区块存储了TApplication.WndProc的地址不是虚函数,如果变成虚函数就不行了),第二个小区块存储了TForm.MainWndProc的地址,如果Form1上只有一个Button1,那么第三个区块存储了TButton.MainWndProc的地址,以此类推。一般情况下,程序员用的了314那么多带回调函数的类吗?好像不需要,只有界面Win控件才需要这个。万一超过了也不要紧,Delphi还会给我们建立下一个314列表。我不明白的是,这么浅显的结论,高手们为什么不明确说出来呢,像我这样举个例子多么容易理解啊,真是郁闷,这么多年都高看了MakeObjectInstance的神秘之处,其实挺简单嘛!

 

参考:

http://blog.csdn.net/linzhengqun/article/details/1451088

MakeObjectInstance的关键理解

标签:style   blog   http   io   ar   color   sp   for   strong   

原文地址:http://www.cnblogs.com/findumars/p/4111164.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!