加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 04:08:31 所属栏目:大数据 来源:网络整理
导读:我需要在Classes.pas中修补一个方法 (TReader.ReadString – 我想强制它使用指定的代码页,而不是系统默认值). 如果我将Classes.pas复制到我的项目中,我将不得不重建整个VCL.有没有(简单)方法在运行时修补方法? 解决方法 修改Classes.pas的实现方面不需要重
我需要在Classes.pas中修补一个方法

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

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

解决方法

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

>如果发现DCU:

> DCU格式是否过时(旧版编译器)?如果是这样,需要source来重新编译或编译时错误.
>路径上的来源?如果是这样,如果它比DCU更新,则重新编译
>对于每个使用过的单位:

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

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

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

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

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

要小心的事情:

>内联例程;内联例程的主体是符号版本的一部分>泛型;泛型类型和方法的实现方是各个符号版本的一部分

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读