我只是为这个问题添加另一个答案,为所有搜索实际 DVCLAL(D elphi V isual C omponent L ibrary A ccess L icense)值的人,以及为所有好奇的人提供一些其他信息作品。
- 就像Jeroen Wiert Pluimers说的那样,如果你想在你的 Delphi 应用程序/库/包/组件中检查“专业或更高版本”或“仅限企业”,你可以使用
RPR
(要求专业)或(“要求客户/服务器”;客户端/服务器分别是早期 Delphi 版本中企业版的名称)。如果不满足要求,将调用( A ccess L icense V iolation ),这将使用( S Not L icensed ) 中定义的消息引发 an 。用英语讲:RCS
ALV
Exception
SysConst.SNL
应用程序未获得使用此功能的许可
- 如果您想检查一个特定版本,可以使用函数的输出
GDAL
( G et D elphi A ccess L icense),它是以下之一 ( 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
with 消息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
并且是描述所需Delphi版本的和数组AL2
中的值;通过进位向右旋转)AL1s
AL2s
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
并AL2
在数组中查找AL1s
and AL2s
,
这样你就可以伪装你使用的版本(至少一点点)。
- 与此同时,官方文档,至少对于函数GDAL,RPR和RCS,已经发布。
- 当然,一切都适用于 C++ Builder。