【发布时间】:2018-03-22 10:19:48
【问题描述】:
我使用了一个第三方库,我需要为其更改一个常量。我想自定义库而不覆盖文件。 pas 文件是库文件,不是可继承的类。
目前我可以通过编辑文件来实现我的目标
unit libraryconstants;
interface
uses
System.Types;
const
constant1 = 'foo';
constant2 = 32;
constant3: Integer = 12;
constant4: TSize = (cx: 32; cy: 32);
不知何故,我需要像这样更改constant4:
constant4: TSize = (cx: 16; cy: 8);
我可以编辑 libraryconstants.pas 并保存它,但是当我更新库时(因为发布了新版本),我将丢失此更改。当然,我可以在每次更新库时提醒我应用此更改,但如果可能的话,我想避免这种情况。
由于常量不是已发布的属性,我不知道如何达到预期的效果。我希望尽可能少地干扰库代码。
我正在寻找我不知道的 Delphi 语言“技巧”。
谢谢。
【问题讨论】:
-
该常量存储在只读存储器中。在启动时,例如在单元初始化中,将内存保护设置为可写。修改内存,恢复内存保护。
-
@DavidHeffernan - 不错的 hack,即使它违反了所有规则......
-
@DavidHeffernan 你有样品吗?谢谢。
-
我会继续修补源代码而不是在运行时修补。您可以通过常用代码路径中的 Assert 来提醒自己。
-
使用带有“供应商分支”的版本控制(这正是它的用例):svnbook.red-bean.com/en/1.7/svn.advanced.vendorbr.html
标签: delphi constants delphi-10-seattle