実際のDVCLAL ( D elphi V isual Component Library Access L icense )値を検索するすべての人のために、この質問に別の回答を追加します。動作します。
- Jeroen Wiert Pluimers が言ったように、Delphi アプリケーション/ライブラリ/パッケージ/コンポーネント内で「Professional 以上」または「Enterprise のみ」を確認したい場合は、(
RPR
R equire Pro ofessional ) またはRCS
(" R equire Client/サーバー」。クライアント/サーバーは、初期の Delphi バージョンではエンタープライズ エディションの名前でした)。要件が満たされない場合は、( Access L icense Violation ) が呼び出され、 ( S N ot Licensed )で定義されたメッセージが表示されます。英語で:ALV
Exception
SysConst.SNL
アプリケーションは、この機能を使用するライセンスがありません
- 特定のエディションを確認したい場合は、関数の出力
GDAL
( G et D elphi Access L icense ) を使用できます。これは、次のいずれかです (配列)。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 リソースに無効な値がある場合、with メッセージを発生させるGDAL
を呼び出します。ALV
Exception
SysConst.SNL
- 外部の EXE/DLL ファイルの DVCLAL 値を確認する場合 (たとえば、リソース エディター、逆コンパイラなどを作成する場合)、DVCLAL リソースを直接クエリする必要があります。
公式の値は 3 つだけです。
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
たとえば、次の代替 DCLAL も機能します。
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
DCLAL を検証するには、次を計算します。
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
、
このようにして、使用したエディションを (少なくとも少しは) 偽装することができます。
- それまでの間、少なくとも関数GDAL、RPR、RCSに関する公式ドキュメントが公開されています。
- もちろん、すべて C++ Builder でも機能します。