技术贴]强大的DELPHI RTTI–兼谈需要了解多种开发语言

Delphi RTTI(运行时类型信息) 如何根据名称找到控件如何根据名称找到对应的属性如何根据名称执行某个方法或事件 运行时类型信(以下简称RTTI)是在运行时保存和检索对象和数据类型的手段.通过RTTI我们可以了解正在使用的对象或组件的信息,并对它们进行一些处理.   RTTI需要引用单元TypInfo   至于RTTI的数据结构,大家可以参考TypeInfo单元的代码   看例子,先为大家介绍一下根据字符串找到属性,并 阅读详情

技术贴]强大的DELPHI RTTI–兼谈需要了解多种开发语言

风焱在《“18般武艺”?》中说到他碰上的被多种语言纠缠的问题。我在回复里说:
 很多语言只要能看懂几分就行了,没必要每一种都精通
但是如果只会很少的一两种语言也是不行的。

因为看了一些关于JAVA的反射技术的应用,忽然想到DELPHI的RTTI也很强,于是试着拿数据集下手,用RTTI来实现它的对象化。用了两个
晚上时间就搞定了(要不是因为开始时搞错对象–基类用了TObject,其实应该是用TPersistent才对),果然很简单。

假设有一个ADODataSet控件,连接罗斯文数据库,SQL为:

select * from Employee

现在要把它的内容中EmployeeID, FirstName, LastName三个字段显示到ListView里。我通过RTTI实现了一个数据集代理类,使得代码得到大大的简化(这两天争取把结果整理出来另外撰文说明)。其结果大致如下:

Type
TPDSEmployee = class( TMProxyDataSet )
published
Property EmployeeID : Integer Index 0 Read GetInteger Write SetInteger;
Property FirstName : String Index 1 Read GetString Write SetString;
Property LastName : String Index 2 Read GetString Write SetString;
End;
...
emp := TPDSEmployee.Create( ADODataSet1 );
While emp.ForEach Do
With ListView1.Add Do
Begin
Caption := IntToStr( emp.EmployeeID );
SubItems.Add( emp.FirstName );
SubItems.Add( emp.LastName );
End;
emp.Free;

对比传统的实现代码,好处是显而易见的。

但是当我实现出这个TMProxyDataSet类后,不禁感到痛心疾首,这个我早在三年前就应该想到的。

三年前DELPHI6刚推出时,我就发现它的SOAP功能是通过DELPHI强大的RTTI来实现的,我为什么当时没有想到去深入研究一下DELPHI的RTTI呢?

这次要不是因为看到了一些JAVA的资料,我可能还是想不到,所以多了解一些别的语言是很重要的事。特别是最近以来,动态语言越来受到关注,虽然它们在性能上不能跟原生开发相比,但在很多的开发思想上,具有重要的启发意义。

在做了这个东东以后,我才意识到,DELPHI其实是所有原生开发语言中,动态性最高的,并不比基于虚拟机的JAVA和C#低多少。只是长期在做RAD的开发,没有体会到而已。程序员在RAD下被惯坏了。

做完这个,我打算下一步再试试用RTTI实现对象的XML持久化(基本上就是抄袭一下DELPHI本身的SOAP实现代码-_-|||)。这个思路应该会比我原先用的XML Data Binding要方便很多,至少不用再去写那个麻烦的XML Schema了。

BTW:以前没有太关注RTTI,效率恐怕是其中最重要的一个原因,但是现在看来,跟虚拟机语言甚至动态语言相比,DELPHI作为原生应用开发,这点RTTI效率损失其实根本没有想像中那么大的影响。换来开发效率的大大提高还是很值得的。

BTW:抄了令狐的一段CSS(<pre>)。^O^

Delphi TMS Diagram Studio源码解析:从图表控件到多版本兼容实战 在软件开发中,第三方控件库是提升开发效率的关键工具,其核心价值在于提供可复用的可视化组件与功能模块。通过深入理解控件的架构设计与实现原理,开发者不仅能快速集成图表绘制、流程图设计等复杂功能,更能掌握底层机制以应对实际工程需求。拥有完整源代码的控件包,如TMS Diagram Studio,为深度定制与问题排查提供了可能,尤其在处理多版本Delphi兼容性时,通过条件编译指令与运行时库适配,可确保从Delphi 7到现代版本的无缝迁移。这种技术实践在维护遗留系统或开发专业图表应用时尤为重要,例如在工业组态或网 阅读详情

相关推荐

DevExpress VCL v55完整组件包安装与实战应用

DevExpress VCL v55 构建于原生VCL框架之上,采用高度模块化设计,提供超过100个高性能控件,涵盖数据展示、报表、图表、导航等企业级UI需求。其核心优势在于外观引擎(Appearance Engine)与皮肤框架(Skin Framework)的深度融合,支持实时主题切换与高DPI适配。// 示例:启用DevExpress皮肤支持// 全局皮肤控制器初始化该组件库通过包分离机制(BPL)实现按需加载,降低内存占用,同时兼容。

weixin_35973118的博客 945

Delphi的RTTI&VMT

网上已经有很多关于RTTI的博客,最近刚好看到这里,以前没弄懂的东西,这次一起搞明白一下,写个博客,算是做个笔记。 这里有一篇英文文档,说的很详细: Delphi Q&amp;amp;amp;amp;A 概念 每个Delphi的类都有一张虚拟方法表(virtual-method table),或者说,Delphi的类是由它来定义的。从编译器角度来看,一个类就是指向VMT的指针。 一个虚拟方法表从指针所指地址的负偏移76 ...

得也一天,失也一天! 1536

Delphi 用Tessercat 4.1 进行OCR(含全部支持文件及中英字库)

Delphi 用Tessercat 4.1 进行OCR的源代码,含全部支持文件及中英字库(v4.1.0.20190314),可直接编译,文字识别的基本功能能够正常使用。

delphi 整型RTTI(运行时类型识别)相关信息

delphi rtti相关笔记

qq_43404969的博客 475

Delphi实现多国语言

Delphi实现多国语言,意思都明白,调用一个配好的语言文件,然后显示。 还可以动态创建组件,并设置其属性。

Win11下DCMTK的Visual Studio 2022配置教程

最近有个新需求,需要完成读取和解析DICOM数据相关的SDK

qq_45797625的博客 3261

Delphi中的RTTI:解锁运行时类型信息的奥秘

在Delphi编程中,RTTI(Run-Time Type Information,运行时类型信息)是一项强大的功能,它允许开发者在程序运行期间获取类型信息。本文详细介绍了Delphi中的RTTI机制,包括其工作原理、如何获取类和数据类型的RTTI信息,以及RTTI在实际编程中的应用场景。随着Delphi语言的不断发展,RTTI机制也将继续进化,提供更多的特性和改进,以满足开发者对于运行时类型信息处理的需求。Delphi中的RTTI主要分为类(class)的RTTI和一般数据类型的RTTI。

2401_85763803的博客 922

agent-browser OpenClaw 的最佳搭档

agent-browser 是专为 AI Agent 设计的浏览器自动化工具,目前被公认为 OpenClaw 的最佳配套方案。这份技术文档完整记录了其架构、协议、性能调优与常见问题处理,非常适合想让OpenClaw 真正“上手”互联网的开发者与老用户。

liu_zhiyi的博客 1781

Delphi RTTI 使用

RTTI(Run-Time Type Information) 翻译过来的名称是“运行期类型信息”,也就是说可以在运行期获得数据类型或类(class)的信息。D2007环境 需引用单元 TypInfo;//类型的详细信息 //类型枚举列表 TTypeKind = (tkUnknown, tkInteger, tkChar, tkEnumeration, tkFloat, tkString,

xia_xing的专栏 4636

linux应用程序段错误调试

一、堆、栈 在分析段错误之前,先了解一下什么是堆?什么是栈? 堆:一般由开发者分配释放,如果没有释放,程序结束时,在有的OS中可能会被自动释放,分配方式类似于链表。堆的操作方式为,队列优先,先进先出的原则。 栈:由操作系统自动分配,存放函数的参数值,局部变量。栈的操作方式为,先进后出的原则。 堆栈中定义了一些操作。 两个最重要的是PUSH和POP。  PUSH:操作在堆栈的顶部加入一个元素...

农村种地人 1111

从零搭建ECG心电图仪:模拟前端电路设计与噪声对抗实战

在电子工程和生物医学信号处理领域,微弱信号的采集与放大是核心挑战。其基本原理在于利用高精度模拟电路,从强大的环境噪声中提取出有用的差分信号。这项技术的核心价值在于将理论上的传感器信号转化为稳定、可靠的可用数据,是连接物理世界与数字系统的关键桥梁。在医疗监护、工业传感和科学测量等场景中,高性能的模拟前端设计直接决定了整个系统的精度与可靠性。本文聚焦于生物电信号采集这一具体应用,深入探讨如何运用差分放大器、低通滤波器和陷波滤波器等经典模块,构建一个能够有效对抗工频干扰和接触噪声的实用电路,最终实现从人体体表清晰

weixin_30616969的博客 459

深度解析:IDR静态分析工具的3层架构设计与Delphi逆向工程实现原理

IDR(Interactive Delphi Reconstructor)是一款专业的Delphi程序逆向工程工具,通过纯静态分析技术为安全研究人员和开发者提供完整的Delphi程序逆向解决方案。该工具支持从Delphi 2到XE4版本编译的EXE和DLL文件逆向分析,特别适用于恶意软件分析、遗留代码恢复和技术研究场景。其核心优势在于模块化架构设计和知识库驱动的分析引擎,能够在不执行目标代码的情况

gitblog_00128的博客 378

测试dali协议的软件,DALI2.0和DALI1.0完美兼容同一个模块,测试每项可过协议

DALI2.0和DALI1.0完美兼容同一个模块,测试每项可过协议深圳聚积智能 夏先生 13246760327 QQ 349098308■IEC62386-102(V2.0)通过测试内容IEC62386-102/2.1/Test preambleIEC62386-102/3.1/Polarity testIEC62386-102/3.2/Maximum and minimum system v...

weixin_35343788的博客 1351

IDR逆向工程实战指南:3步掌握Delphi程序静态分析的完整方法

在逆向工程领域,Delphi程序的分析一直是个技术难点,而IDR(Interactive Delphi Reconstructor)作为一款专业的Delphi程序逆向工程工具,为安全研究人员和开发者提供了强大的静态分析能力。这款免费工具能够反编译从Delphi 2到XE4版本编译的EXE和DLL文件,特别适合病毒分析、代码恢复和技术研究场景,通过纯静态分析技术确保分析过程的安全可靠。 ## 🔍

gitblog_01087的博客 446

【PyTorch深度学习项目实战100例目录】项目详解 + 数据集 + 完整源码

大家好,我是阿光。本专栏整理了《深度学习100例》,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。正在更新中~ ✨。

优快云 精品推荐 10万+

图像处理之边缘检测[微分算子、Canny算子和LOG算子]

LOG算子是在经典算子的基础上发展起来的边缘检测算子,根据信噪比求得检测边缘的最优滤波器。边缘总是以强度突变的形式出现,可以定义为图像局部特性的不连续性,如灰度的突变和纹理结构的突变等。图像的边缘包含了物体形状的重要信息,它不仅在分析图像时大幅度地减少了要处理的信息量,而且还保护了目标的边界结构。对于复杂的图像,采用Roberts算子不能较好地得到图像的边缘,而需要采用更加复杂的3X3的算子比如Prewitt算子。对于离散的图像f(x,y),边缘检测算子是用图像的垂直和水平差分来逼近梯度算子,即。

qq_44111805的博客 9833

Delphi逆向工程实战:3个高效静态分析技巧与代码恢复策略

在安全研究和软件开发领域,Delphi程序的逆向工程一直是个技术挑战。IDR(Interactive Delphi Reconstructor)作为一款专业的Delphi逆向工程工具,通过静态分析技术为安全研究人员和开发者提供了一套完整的解决方案。这款工具能够反编译从Delphi 2到XE4版本编译的EXE和DLL文件,特别适合病毒分析、代码恢复和技术研究场景。 ## 项目概述与核心价值 🎯

gitblog_00129的博客 346

数据结构课程设计C/C++版--美团餐馆预定信息的管理与分析 5 6

第5关:注销个人信息。

m0_62222486的博客 2124

如何快速掌握IDR:Delphi逆向工程的完整实战指南

你是否曾经面对一个Delphi编译的程序,却无法理解其内部逻辑?当传统的调试工具在面对Delphi二进制文件时束手无策,你是否渴望一个专业的解决方案?今天,我将为你介绍一款强大的**交互式Delphi反编译器**——IDR(Interactive Delphi Reconstructor)。这款开源的**Delphi逆向工程工具**能够处理从Delphi 2到Delphi XE4编译器生成的各种可

gitblog_00331的博客 69

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

IDR工具完全指南:从零开始掌握Delphi程序逆向工程

如果你曾经需要分析Delphi编译的程序却苦于没有源代码,或者作为安全研究人员需要深入分析Windows可执行文件,那么IDR(Interactive Delphi Reconstructor)正是你需要的终极工具。这款专为Windows 32位环境设计的交互式Delphi反编译工具,能够高效处理EXE和DLL文件,为逆向工程和安全分析提供了强大的支持。 ## 📊 IDR项目概览与核心价值

gitblog_01183的博客 234

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Delphi逆向工程利器:IDR交互式反编译器完整实战指南

在软件逆向工程和安全分析领域,Delphi编写的程序一直是一个特殊的挑战。这些由Borland Delphi编译器生成的可执行文件,因其独特的内部结构和丰富的运行时信息,需要专门的工具进行有效分析。IDR(Interactive Delphi Reconstructor)正是为解决这一难题而生的专业工具,它为安全研究人员和开发者提供了强大的Delphi二进制文件逆向分析能力。 ## 为什么需要专

gitblog_01176的博客 16

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

掌握Delphi逆向工程:IDR反编译工具完全指南

IDR(Interactive Delphi Reconstructor)是一款专业的Delphi反编译工具,专为逆向工程师和安全研究人员设计,能够处理从Delphi 2到Delphi XE4版本编译的Windows可执行文件和动态链接库。这款开源工具采用纯静态分析技术,确保在分析恶意软件和恢复丢失源代码时的安全性,是Delphi二进制文件逆向分析的强大解决方案。 ## 🎯 为什么选择IDR进

gitblog_00488的博客 138

揭秘Windows逆向工程神器:IDR工具从零开始到精通实战

你是否曾经面对一个Delphi编译的程序,却找不到原始源代码?或者作为一名安全研究员,需要安全地分析可疑的Windows可执行文件?今天我要向你介绍一款强大的工具——IDR(Interactive Delphi Reconstructor),这是一款专门为Windows 32位环境设计的交互式Delphi反编译工具,能够高效处理EXE和DLL文件。无论你是想恢复丢失的Delphi源代码,还是需要安

gitblog_01025的博客 260

反射、注解

反射、注解 反射 1.1. 反射的介绍 “程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”,如Python,Ruby是动态语言;显然C++, Java,C#不是动态语言,但是JAVA有着一个非常突出的动态相关机制:Reflection。 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动...

Yearsuree的博客 292

DELPHI中使用RTTI

    运行期类型信息(RTTI)是一种语言特征,能使应用程序在运行时得到关于对象的信息。RTTI是Delphi的组件能够融合到IDE中的关键。它在IDE中不仅仅是一个纯学术的过程。    由于对象都是从TObject继承下来的,因此,对象都包含一个指向它们的RTTI的指针以及几个内建的方法。下面的表列出了TObject的一些方法,用这些方法能获得某个对象实例的信息。

1212

Delphi 的RTTI机制浅探

Delphi 的RTTI机制浅探  目 录===============================================================================⊙ DFM 文件与持续机制(persistent)⊙ ReadComponentResFile / WriteComponentResFile 函数⊙ Delphi 持续机制框架简述⊙ 一个 TFor

jian704的专栏 2146
上一篇: 什么是反射机制
下一篇: RTTI
一剑平江湖
博客等级 码龄18年 207粉丝 1070原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值