TObject 对象模型

OpenCASCADE:OCCT应用框架TObj模型对象解析 本文将介绍OCAF中的TObj模型对象,并附有相应的源代码。TObj是OCAF中的一种基础模型对象,其主要用途是在OCAF数据结构中保存一些简单的基本类型数据(如字符串、二进制数据等)和一些自定义的数据类型。TObj模型对象是OCAF中最简单的模型对象,它不需要派生出新的类,只需要通过调用已有的类方法来实现即可。本文介绍了OpenCASCADE中的TObj模型对象,以及如何创建、设置和获取该模型对象的属性值。要将TObj模型对象添加到数据结构中,必须先创建一个标签节点。方法设置TObj模型对象的属性值。 阅读详情

TObject 对象模型创建步骤
1.分配和初始化内存(内存切换【未开放】)
 1.1:Object Pascal 的对象模型会先初始化所有的内存内容为0,String 类型为空字符串
 1.2:为类中声明的特别字段进行初始化的工作
2.设定字段变量数据结构
3.设定执行框架

 

Object Pascal 对象模型提供的基础服务
1.对象创建服务: 提供创建对象机制
  TObject = class
    ...
    constructor Create;
    class function NewInstance: TObject; virtual;           
    class function InitInstance(Instance: Pointer): TObject;
    class function InstanceSize: Longint;
    procedure AfterConstruction; virtual;
    ...   
  end;
  NewInstance 是虚拟方法,功能是为对象分配内存,并且调用InitInstance 方法为对象设定对象支持的借口。
  NewInstance 的返回值是TObject,代表调用了NewInstance之后Object Pascal的对象模型已经在内存形成了
  TObject的实体(instance),此时仍然无发使用,要设定对象的执行框架
 
2.对象释放服务: 提供对象释放机制
  TObject = class
     
    procedure CleanupInstance;
    procedure FreeInstance; virtual;
    destructor Destroy; virtual;
    procedure Free;
   
  end;
  
  Destroy 派生类分配的资源释放需要:
  1.Destroy:在派生类中需要重载(override)
  2.在改写的Destroy中先释放派生类自己的资源
  3.最后调用父类的Inherited 关键字调用父类的虚拟析构函数


3.对象识别服务: 提供对象判断,识别的机制
  TObject = class
   ...
    class function ClassName: ShortString;
    class function ClassNameIs(const Name: string): Boolean;
    class function ClassParent: TClass;
    class function InstanceSize: Longint;
    class function InheritsFrom(AClass: TClass): Boolean;
    ...
  end;
 
  ClassName:返回类名称
  ClassNamels:判断特定类的名称
  ClassParent:返回类的父类
  InstanceSize:返回类对象占据的内存的大小
  InheritsFrom:判断类是否从特定的类继承下来的
 
  对象识别服务方法都是声明称类方法(Class Method),所谓类方法就是程序代码中不需要这个类的对象实体来调用,可直接使用:
 
  类.类方法

4.对象信息服务: 提供程序代码存取对象信息的服务
  TObject = class
  ...
    class function ClassInfo: Pointer;
    class function MethodAddress(const Name: ShortString): Pointer;
    class function MethodName(Address: Pointer): ShortString;
    function FieldAddress(const Name: ShortString): Pointer;
    function GetInterface(const IID: TGUID; out Obj): Boolean;
    class function GetInterfaceEntry(const IID: TGUID): PInterfaceEntry;
    class function GetInterfaceTable: PInterfaceTable;
    function SafeCallException(ExceptObject: TObject;
      ExceptAddr: Pointer): HResult; virtual;
     ...
  end;
 
  ClassInfo: 返回类的RTTI表格信息
 MethodAddress: 返回Published 类方法的地址
 MethodName: 返回类名方法的名称
 FieldAddress: 返回Published 的字段变量
 GetInterface: 返回类实现的接口信息
 GetInterfaceEntry: 返回特定接口的信息
 GetInterfaceTable: 返回类所有实现接口的表格信息
 SafeCallException: 处理使用 Safe Call 异常的虚拟方法
 
5.对象消息分派服务: 提供Object Pascal分派消息的服务,和VCL封装窗口消息有密切的关系

 

VCL FrameWork 方法种类
1.类方法(Class Method),也叫静态方法(Static Method):类范围内的方法,可直接使用类名称来调用,无需经由类对象来调用
2.对象方法(Object Method):类一般定义的方法,经由类对象来调用
3.虚拟方法(Virtual Method): 提供派生类(derived Class)改写(override)父类(Parent Class)定义的方法机制
4.重载方法(Overload Method): 定义同名,但具有不同参数原型的方法,主要是定义多个构造函数,活接受不同参数,但有相同名称的函数
5.动态方法(Dymanic Method):类似于虚拟方法,但可以大幅减少VMT的大小,效率比虚拟方法稍微慢一点
6.事件处理函数(Event Handler):组件阶层VCL对象的特别方法,可结合图形用户界面提供反应外界触发事件的能力

注意:
 1.在父类中同时是虚拟方法和重载方法,派生类必须要加 reintroduce 来声明

 

影刀RPA之成绩批量查询系统 自动化登录账号,读取数据表中内容去填写信息去查询,并判断多个数据不同的页面去不同的读取查询结果内容,如考生各项信息与各科成绩,总分和查询时间,采集出来到指定的数据表格中,等待时间并依次循环运行。主要功能。 阅读详情

相关推荐

RAGFlow + GraphRAG+ 知识图谱 + QwQ32B探索实践

RagFlow 是一款开源的 RAG(Retrieval-Augmented Generation)引擎,专注于深度文档理解,能够助力企业及个人构建高效的 RAG 工作流程。借助大语言模型(LLM),它可以精准处理各种复杂格式的数据,为用户提供可靠的问答服务,并附上详实的引用依据。

技术引领业务创新 8万+

探索Delphi类与对象的内存结构

初次接触DELPHI对它提供的RAD快速编程模式颇感神奇,随手拖放及格控件设定些属性一个应用程序就诞生了,我正是被这种特性所吸引。随着深入,慢慢的窥探到了DELPHI的VCL体系,知道了随手拖放背后隐藏的秘密:一切都起源于VCL的对象体系,一切都是面对对象的编程思想。Object pascal就是是怎样实现这个体系的呢,它究竟是如何将面对对象的特性表现出来的呢,Delphi的类和对象究竟是以什么样...

weixin_34384681的博客 350

使用JAVA 的 POI 库 将DOC文件转为DOCX文件

java使用POI库,将doc文件转为docx文件

qq_45808266的博客 5705

Object结构初探

前言: 本来lbq同学在这里已经将Object基本分析个底朝天了,然而最近看Shared Source Internal 看的手痒,于是小生还是不禁想补充一下,顺便也当自己理清一下思路好了 J, 如果您能从本文带来一点收获,当然是高兴不过了 本文逻辑 从Object的对象布局入手,结合SSCLI代码对于Object的结构做一次整体解析 引言 Object是所有对象的基础,如 E...

weixin_30336061的博客 234

Anolis 8系统下,手把手搞定Nginx、Redis、JDK8和Tomcat9的完整安装与配置(含开机自启)

本文详细介绍了在Anolis 8系统下搭建Java Web全栈环境的完整流程,包括JDK8、Tomcat9、Nginx和Redis的安装与配置,并实现系统级服务管理。通过深入每个组件的配置细节,揭示服务间的协同关系,最终打造一个生产级可用的标准化环境。

weixin_42556197的博客 158

持续集成介绍及Jenkins自动化测试部署

学习持续集成及jenkins的自动化测试部署

ouihsiad的博客 4575

Delphi7 VCL 类结构代码分析与解释之一——TObject类

    本文以Borland公司的Delphi 7产品为基础,介绍Delphi7 VCL 类结构代码,对其中每一个类中的方法代码作逐条的分析与解释,以求能真正理解VCL。    我知道,这是一项庞大、长久、艰苦的工作,但是不这样做不行。我用了好多年的Delphi,用它的VCL组件,我早就发现,如果不做这项工作,我将永远无法深入理解Delphi,事实的确如此。    之所以选中Delphi7

1222

Django框架中settings文件的部署建议

为了更好地管理开发和生产环境的配置,建议将settings文件分为多个文件,分别用于不同的环境。然后,通过在启动应用程序时指定不同的settings文件,来加载相应的配置。在Django框架中,settings.py文件是非常重要的配置文件,它包含了项目的各种设置和选项。在Django框架中,settings.py文件是非常重要的配置文件,它包含了项目的各种设置和选项。可以使用Python的。为了更好地管理开发和生产环境的配置,建议将settings文件分为多个文件,分别用于不同的环境。

WELL_CODER的博客 128

Object 类结构的剖析(常用类)(面向对象的非主线内容)

文章目录`java.lang.Object类`面试题: == 和 equals() 区别== :运算符(可以使用在基本数据类型变量和引用数据类型变量中)equals()方法的使用Object类中toString()的使用 java.lang.Object类 1.Object类是所有Java类的根父类 2.如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类 3.Object类中的功能(属性、方法)就具有通用性。 属性:无 方法:equals() / toSt

AC_872767407的博客 549

OpenClaw人人养虾:发现与传输

客户端需要先"发现"Gateway 的地址和端口,才能建立连接。OpenClaw 支持多种发现(Discovery)和传输(Transport)机制。

王国平的博客 572

innovus:如何在init design之后新增参考库(lib/lef)

如题,在PR过程中经常会遇到这种问题,时序无法收敛,需要新增一套lvt或者hpc的库,怎么办?

m0_61544122的博客 5007

核心库类之TObject

1TObject=class2constructorCreate;3procedureFree;4classfunctionInitInstance(Instance:Pointer):TObject;5procedureCleanupInstance;6functionClassType:TClass;7clas...

weixin_30279671的博客 161

orchestrator常见问题汇总

默认的取集群名称的规则为参数决定 ,默认为取主实例 主机名 ,然后按分隔符"."之前的第一段字符为集群别名,这样在集群主库宕机后,新提升的从库的服务器名称为了新的集群名,宕机的主库成为单独的一个集群。1 默认配置文件中设置了匹配规则 ,只有被匹配的主机名才能进行故障恢复,所以该参数需要设置为 "*"3 另外配置文件中还有许多发现,恢复的忽略规则(Ignore) 这些参数也是需要注意的。由于LVS的后端的RS为IP地址,如果直接显示主机名,LVS的接口方法将无法工作。只传入脚本中用到的参数,不要多传入。

DBA之路的博客 829

VCL的架构设计

VCL的架构设计图

RegeditNo1的专栏 601

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Delphi中类的VMT

TObject是所有对象的基本类,DELPHI中的任何对象都是一个指针,这个指针指明该对象在内存中所占据的一块空间!  对象空间的头4个字节是指向该对象类的虚方法地址表(VMT-Vritual Method Table)。接下来的空间就是存储对象本身成员数据的空间,并按从该对象最原始祖先类的数据成员到该对象类的数据成员的总顺序,和每一级类中数据成员的定义顺序存储。  类的虚方...

weixin_30377461的博客 294

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

DELPHI 对象的本质 VMT

http://www.cnblogs.com/little-mat/articles/2206627.html TObject是所有对象的基本类,DELPHI中的任何对象都是一个指针,这个指针指明该对象在内存中所占据的一块空间!  对象空间的头4个字节是指向该对象类的虚方法地址表(VMT-Vritual Method Table)。接下来的空间就是存储对象本身成员数据的空间,...

weixin_30872157的博客 358

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Delphi 对象模型学习笔记(转)

摘要     Borland Object Pascal 对象模型(现在已经正是命名为 Delphi 语言)与其他 OOP 语言一样,都提供了一些基础服务: 如对象创建服务、对象释放服务、对象识别服务、对象信息服务,除此之外在编译器和 VCL framework 级别上提供了一些额外的服务,例如对象消息分派服务。 前言  首先说一下,Delphi 对象模型涉及的概念非常多,因此在这篇笔记中...

weixin_33725807的博客 292

Delphi中虚拟方法表和动态方法表

Delphi中所有类都直接或者间接派生于TObject,一个TObject的实例:Object(对象)实际上是一个4字节的指针。该指针指向对象的实际数据区(Object Data)。对象的数据区划分很多的小区域,这些区域分为两部分: (1)前4个字节存放一个指针,该指针指向另一个地址区域。 (2)其余小区域分别存放对象的各种数据成员。    前四个字节字节的指针指向另一地址区域即“虚拟方法表

chinmusam的专栏 921

Delphi 对象模型学习笔记

来源:http://blog.youkuaiyun.com/NoteXPad/archive/2004/08/21/80528.aspx标题:Delphi 对象模型学习笔记关键词:Delphi 对象模型 作者:dREAMtHEATER难度:普通[]  中等[x]  高级[]http://dREAMtHEATER.yeah.netE-Mail:NoteXPad@163.com完成日期:2004年08月2

§为艺术而技术§ 1316

【01】概述

【01】Delphi实际上是Object Pascal语言的一种版本,在Delphi 7中所使用的编程语言已经正式被命名为Delphi语言。【02】Delphi不区分字符大小写。【03】Delphi中字符串用单引号括起来。【04】对象观察器(Object Inspector)。【05】在Delphi里,TObject是Delphi对象的根,所有的对象的基类都是TObject。【06】Delphi ...

weixin_34015860的博客 101

苛评VCL: 接口与TObject

在李维的《inside VCL》中详细描述了VCL中TObject的地位。是的Borland的工程师们有心将Delphi语言做成pure language。所以你几乎可以看到TObject的所有pure pascal的实现。更重要的,你应该会发现。Delphi将代码的所有运行机制都暴露在我们面前。这也就是Delphi的TObject和C++中的Object以及C#的Object有很大不同的地方

韩小明@xiammy的专栏 8822

Tobject 类解析

TObject = class     //创建     constructor Create;     //释放     procedure Free;     //初始化实列     class function InitInstance(Instance: Pointer): TObject;     //清除实列     procedure CleanupInstance;

流年~~ 4111

delphi的Tobject类赏析

delphi的Tobject类赏析 TObject = class //创建 constructor Create; //释放 procedure Free; //初始化实列 class function InitInstance(Instance: Pointer): TObject; //清除实列 procedure CleanupIn

u010569495的专栏 560
上一篇: VCL的架构设计
下一篇: MetaData【元数据】
RegeditNo1
博客等级 码龄16年 2粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值