Snippets

Stefan Glienke ARC crash

Created by Stefan Glienke last modified
program ARMCrash;

uses
  TestFramework,
  TestInsight.DUnit,
  Rtti;

type
  TTestObject = class
    class procedure DoSomething(const Value: TGUID); static;
  end;

  TTestEvent = class(TTestCase)
  const
    MyGUID: TGUID = '{CCD21A05-9527-411F-AB44-AAF44C0E0DAF}';
  private
    procedure DoInvoke(UserData: Pointer;
      const Args: TArray<TValue>; out Result: TValue);
  published
    procedure TestInvoke;
  end;

{ TTestObject}

class procedure TTestObject.DoSomething(const Value: TGUID);
begin
end;

{ TTestEvent }

procedure TTestEvent.DoInvoke(UserData: Pointer; const Args: TArray<TValue>;
  out Result: TValue);
begin
  CheckTrue(Args[0].AsType<TGuid> = MyGUID);
end;

procedure TTestEvent.TestInvoke;
var
  ctx: TRttiContext;
  mi: TMethodImplementation;
  e: procedure(const Value: TGUID);
begin
  mi := ctx.GetType(TTestObject).GetMethod('DoSomething').CreateImplementation(nil, DoInvoke);
  e := mi.CodeAddress;
  try
    e(MyGUID);
  finally
    mi.Free;
  end;
end;

begin
  RegisterTest(TTestEvent.Suite);
  RunRegisteredTests;
  ReportMemoryLeaksOnShutdown := True;
end.

Comments (0)

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.