当我遇到这个函数时,我正在阅读 SysUtils:
function ALR: Pointer;
var
LibModule: PLibModule;
begin
if MainInstance <> 0 then
Result := Pointer(LoadResource(MainInstance, FindResource(MainInstance, 'DVCLAL',
RT_RCDATA)))
else
begin
之后我搜索了DVCLAL是什么,发现了这个问题。
Delphi 编译器向 DVCLAL 资源发出的所有可能的签名是什么?
我只是为所有搜索实际 DVCLAL (= Delphi Visual Component Library Aaccess License) 值的人添加另一个答案,如下以及一些其他信息,供所有对这些东西如何工作感到好奇的人使用。
RPR
(= "Require Pr ofessional") 或 RCS
(= "Require Client/Server";客户端/服务器是早期 Delphi 版本中企业版的名称)。如果不满足要求,将调用 ALV
(= "Aaccess License Violation"),这将引发 Exception
,其中包含 SysConst.SNL
(= "() 中定义的消息String)Not L许可”)。英文:应用程序未获得使用此功能的许可
GDAL
(Get Delphi Aaccess License) 的输出,它是以下之一 ( AL1s
数组):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
。
官方值只有三个:
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
和AL2
是描述所需Delphi版本的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
和
AL2s
这样你就可以伪装你所使用的版本(至少一点点)。
没有这方面的官方文档,所以这里是我 15 多年前的笔记中的一些内容:
DVCLAL
用于检查您正在使用的 Delphi 的 SKU,每个 SKU 都有所不同。
仅检查专业版 (
RPR
) 和客户端/服务器 (RCS
) SKU:
procedure RCS;
procedure RPR;
如果失败,他们会调用这个方法:
procedure ALV;
begin
raise Exception.CreateRes(@SNL);
end;
哪里
resourcestring
SNL = 'Application is not licensed to use this feature';
根据特征矩阵和 Delphi 版本,各种组件在其
RPR
构造函数中调用 RCS
和 Create
来保证最小 SKU。