Project PROTECTION
Project Structure
PROTECTION.DPR
program Protection;
uses
Forms,
ProtForm in 'ProtForm.pas' {Form1},
TestClass in 'TestClass.pas';
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
PROTFORM.PAS
unit ProtForm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
uses
TestClass;
procedure TForm1.Button1Click(Sender: TObject);
var
Obj: TTest;
begin
Obj := TTest.Create;
Obj.PublicData := 10;
// Obj.ProtectedData := 20; //won't compile
ShowMessage (Obj.GetValue);
Obj.Free;
end;
type
TFake = class (TTest);
procedure TForm1.Button2Click(Sender: TObject);
var
Obj: TTest;
begin
Obj := TTest.Create;
Obj.PublicData := 10;
TFake (Obj).ProtectedData := 20; // compiles!
ShowMessage (Obj.GetValue);
Obj.Free;
end;
end.
TESTCLASS.PAS
unit TestClass;
interface
type
TTest = class
protected
ProtectedData: Integer;
public
PublicData: Integer;
function GetValue: string;
end;
implementation
uses
SysUtils;
function TTest.GetValue: string;
begin
Result := Format ('Public: %d, Protected: %d',
[PublicData, ProtectedData]);
end;
end.
PROTFORM.DFM
object Form1: TForm1
Left = 266
Top = 126
Width = 285
Height = 129
Caption = 'Protection'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
PixelsPerInch = 96
TextHeight = 13
object Button1: TButton
Left = 48
Top = 32
Width = 75
Height = 25
Caption = 'Run Test'
TabOrder = 0
OnClick = Button1Click
end
object Button2: TButton
Left = 136
Top = 32
Width = 75
Height = 25
Caption = 'Hack'
TabOrder = 1
OnClick = Button2Click
end
end
|