我只是为所有搜索实际 DVCLAL (=Delphi Visual C成分Library Access License)值,以及一些其他信息,供所有对事物如何工作感到好奇的人使用。
- 正如 Jeroen Wiert Pluimers 所说,如果您想在 Delphi 应用程序/库/包/组件中检查“专业或更高版本”或“仅限企业”,您可以使用
RPR
(= "Require Pr专业”)或RCS
(= "Require Client/S服务器”;Client/Server 分别是早期 Delphi 版本中企业版的名称)。如果不满足要求,ALV
(= "Access License V违规”)将被调用,这将引发Exception
消息定义在SysConst.SNL
(= "(String) Not L获得许可”)。英文:
应用程序未获得使用此功能的许可
- 如果您想检查某个特定版本,可以使用该函数的输出
GDAL
(Get Delphi Access L许可证),它是以下之一(AL1s
array):
AL1s[0] = $FFFFFFF0; // Standard/Personal edition DVCLAL value
AL1s[1] = $FFFFEBF0; // Professional edition DVCLAL value
AL1s[2] = $00000000; // Enterprise/ClientServer edition DVCLAL value
AL1s[3] = $FFFFFFFF; // DVCLAL resource not existing
如果 DVCLAL 资源具有无效值,GDAL
将会通知ALV
这将提高Exception
与消息SysConst.SNL
.
- 如果您想检查外部 EXE/DLL 文件的 DVCLAL 值(例如,如果您想编写资源编辑器、反编译器等),则必须直接查询 DVCLAL 资源。
官方值只有三个:
Standard: 23 78 5D 23 B6 A5 F3 19 43 F3 40 02 26 D1 11 C7
Professional: A2 8C DF 98 7B 3C 3A 79 26 71 3F 09 0F 2A 25 17
Enterprise: 26 3D 4F 38 C2 82 37 B8 F3 24 42 03 17 9B 3A 83
- 只是为了好玩:如果你解出公式
0 = (ROR(a,15) xor a) xor (ROR(b,10) xor b) xor (ROR(c,5) xor c) xor (AL1 xor AL2)
您可以定义任何您想要的 DVCLAL 值(元组 a、b、c、d)! (AL1
and AL2
是中的值AL1s
and AL2s
描述所需 Delphi 版本的数组;ROR向右旋转,无进位)
例如,以下是也可以工作的替代 DVCLAL:
Standard: 00 00 00 00 00 00 00 00 9B 70 0C 66 6B 8F F3 99
Professional: 00 00 00 00 00 00 00 00 9A DB 73 0F 6A 30 8C F0
Enterprise: 00 00 00 00 00 00 00 00 D8 B2 48 11 D8 B2 48 11
要验证 DVCLAL,您需要计算
AL1 := DVCLAL[0] xor DVCLAL[1] xor DVCLAL[2] xor DVCLAL[3];
AL2 := ROR(DVCLAL[0],15) xor ROR(DVCLAL[1],10) xor ROR(DVCLAL[2],5) xor DVCLAL[3];
并抬头看AL1
and AL2
在数组中AL1s
and AL2s
,
这样你就可以伪装你所使用的版本(至少一点点)。
-
与此同时,官方文档,至少对于这些功能GDAL, RPR, and RCS,已发表。
-
当然,一切也适用于 C++ Builder。