delphi – 如何在Classes.pas中修补方法

栏目: 编程语言 · 发布时间: 7年前

内容简介:我需要在Classes.pas中修补一个方法(TReader.ReadString – 我想强制它使用指定的代码页,而不是系统默认值).如果我将Classes.pas复制到我的项目中,我将不得不重建整个VCL.有没有(简单)方法在运行时修补方法?

我需要在Classes.pas中修补一个方法

(TReader.ReadString – 我想强制它使用指定的代码页,而不是系统默认值).

如果我将Classes.pas复制到我的项目中,我将不得不重建整个VCL.有没有(简单)方法在运行时修补方法?

修改Classes.pas的实现方面不需要重新编译所有内容. Delphi计算出一个单元是否需要通过类似于此的算法重新编译:

>如果发现DCU:

> DCU格式是否过时(旧版编译器)?如果是这样,需要source来重新编译或编译时错误.

>路径上的来源?如果是这样,如果它比DCU更新,则重新编译

>对于每个使用过的单位:

>加载时重复分析

>对于该单位的每个使用过的符号(“import”:类型,变量,例程,初始化常量等):

>导入的符号版本是否与使用过的单位中的符号不​​同?如果是这样,需要重新编译.

>如果未找到DCU,则需要找到并编译源代码,否则编译时错误

符号版本的重要概念.保存DCU时,Delphi会根据符号的接口声明计算散列,并将其与符号关联.使用该符号的其他单位也存储符号版本.这样,与大多数C链接器不同,避免了由过时符号引起的链接时冲突.

这样做的结果是,您应该能够将Classes.pas添加到您的项目中并几乎根据您的内容修改其实现部分,并且仍然能够静态链接其余的RTL和VCL以及第三方库,甚至那些只以对象格式提供的.

要小心的事情:

>内联例程;内联例程的主体是符号版本的一部分

>泛型;泛型类型和方法的实现方是各个符号版本的一部分

翻译自:https://stackoverflow.com/questions/1482311/how-to-patch-a-method-in-classes-pas


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Machine Learning

Machine Learning

Kevin Murphy / The MIT Press / 2012-9-18 / USD 90.00

Today's Web-enabled deluge of electronic data calls for automated methods of data analysis. Machine learning provides these, developing methods that can automatically detect patterns in data and then ......一起来看看 《Machine Learning》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具