Windows中是怎样管理类的?(100分)

  • 主题发起人 主题发起人 strongburn
  • 开始时间 开始时间
S

strongburn

Unregistered / Unconfirmed
GUEST, unregistred user!
我提这个问题的起因是想作一个回放软件,它能够识别控件,不管运行时窗口的位置是否改变都能够找到对应控件(例如对一个按钮作单击事件)。
涉及到的疑惑如下:
1.windows 对相同类名的对象是怎样识别的?
以下我乱想的只是为了大家能够更明确回答我的问题:我们无论用何种语言编写Windows程序最终都会被编译器编译成Windows识别的代码。无论你用C++还是Delphi编写类,最终都可以用Windows API识别,也就是说操作系统规定了一定的规则。类的实体也就是内存中的一个结构实体,不同的编译器编译的类的实体在内存中的结构有一定差异,它们是通过不同的逻辑对类的实体进行访问。但也应该有相同点,否则Windows怎样对它进行管理。
大家定义的类名一定会重,也就会出现Windows中运行着两种类名相同但类结构不同对象。这种现象一定会出现,也就是说Windows中一定会出现这种现象,但它允许。应该是有内部码在区分才对。感觉对于“多重继承”这样的东东只是在表现在语言的灵活性(和编译器有关系),对于运行的时候有什么体现吗?再例如“多态”这个东东,在界面中我选择“人”性别就会出现“男女”我选择狗时就会出现“公母”同样用很多方法实现,但我用OO实现时不仅仅是在开发上的方便,在程序实际运行时对内存单元的访问逻辑不同,确实是OO的。不同语言编译出的东东,都有差别,那中间的共同规范是什么呢?类在Windows中到底是怎样的?呵呵,我本身也不是很知道我呀得到什么了,只是希望大家能在我想的问题上多多指导,让我弄懂实质。这里先谢了。
 
你的这个问题可是够复杂的,应该说,你是想了解语言的编译器为我们做了什么,编译后的程序运行后在内存中是什么样的结构分布。不同语言是不同的,比如delphi编译后在内存中会为类建立虚方法表等存储结构,而c++是为类直接分配存储空间。如果要彻底了解这个恐怕不是一个简单提问就可以的,有很多东西要学。
 
这个问题真够复杂的
一个菜鸟也不发表什么高论啦
 
请大家多多指导,我自己顶!
 
我的理解是Windows在某种程度上是“基于对象”的,但它不是面向对象的;
所以我觉得你的想法比较难以实现:你可以得到组件的Class, Text, Handle,但你无法在所有的Windows程序得到类似Delphi组件的Name的那个属性,因为Delphi自己定义了Name这样的属性,而这和它的存储方式有关;而Handle是由Windows分配的,每次程序运行时可能都不相同;但仅仅通过Class是无法定位到具体控件的;对于Text,这就不必说了,它更不能确定控件了。
 
大家有没有对WinRunner熟悉的,它的Context Sensitive模式的原理哪位比较清楚?
 
请各位帮忙顶一下。
 
提前一下,还是希望给位能谈谈相关的东西。
 
后退
顶部