All pastes #19196 Raw Edit

Unnamed

public text v1 · immutable
#19196 ·published 2005-08-03 15:38 UTC
rendered paste body
procedure MyTest_StdCall(a, b : integer); stdcall;
begin
  Form1.Memo1.Lines.Add(Format('stdcall: %d + %d = %d', [a, b, a + b]));
end;

procedure MyTest_Cdecl(a, b : integer); cdecl;
begin
  Form1.Memo1.Lines.Add(Format('cdecl: %d + %d = %d', [a, b, a + b]));
end;

procedure MyTest_Register(a, b : integer); register;
begin
  Form1.Memo1.Lines.Add(Format('register: %d + %d = %d', [a, b, a + b]));
end;

//

procedure TForm1.FormCreate(Sender: TObject);
var
  newcall : pvmbruntimecall;
begin
  Memo1.Lines.Clear;

  newcall := vmbrtm_new;
  vmbrtm_setcallconv(newcall, vmb_callconv_stdcall);
  vmbrtm_setaddress(newcall, @mytest_stdcall);
  vmbrtm_pushparam32(newcall, 13);
  vmbrtm_pushparam32(newcall, 5);
  vmbrtm_callproc(newcall);
  vmbrtm_del(newcall);

  newcall := vmbrtm_new;
  vmbrtm_setcallconv(newcall, vmb_callconv_cdecl);
  vmbrtm_setaddress(newcall, @mytest_cdecl);
  vmbrtm_pushparam32(newcall, 13);
  vmbrtm_pushparam32(newcall, 5);
  vmbrtm_callproc(newcall);
  vmbrtm_del(newcall);

  newcall := vmbrtm_new;
  vmbrtm_setcallconv(newcall, vmb_callconv_register);
  vmbrtm_setaddress(newcall, @mytest_register);
  vmbrtm_pushparam32(newcall, 13);
  vmbrtm_pushparam32(newcall, 5);
  vmbrtm_callproc(newcall);
  vmbrtm_del(newcall);
end;

{
output:

stdcall: 13 + 5 = 18
cdecl: 13 + 5 = 18
register: 13 + 5 = 18

}