Здравтсвуйте Уважаемые Мастера!!!!!!!!!!!!!!!!!!!
Помогите найти ошибку в следующем коде:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
const
MaxParam = 32;
implementation
{$R *.dfm}
function f2(a

ointer):integer; assembler;
asm
push edi
push esi
mov ecx,MaxParam*4
sub esp,ecx
mov edi,esp
lea esi,[ebp+8]
rep movsd
lea edi,[esp+MaxParam*4]
call eax
mov esp,edi
pop esi
pop edi
end;
function f1(hWnd: HWND; lpText, lpCaption: PAnsiChar; uType: UINT): Integer; stdcall;
var
a: pointer;
begin
a:=@MessageBoxA;
f2(a);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
f1(0,'TEST','HEAD',MB_OK);
end;
end.
В результате нажатия на Button1 я, таки, вижу MessageBox с кнопкой Ok заголовком HEAD и текстом TEST, но при нажатии на кнопку OK ловлю следующее сообщение:
Project Project1.exe raised exception class EAccessViolation with message 'Access Violation at address 001703CA read of address 001703CA'. Process stopped.
Честно говоря, assemblerna`я вставка не моя, и я почти не знаком с этим без сомнений замечательным языком, поэтому найти ошибку просто не в состоянии, вот и прошу, нет, молю!!!!!!!!!!!
Помочь мне исправить этот код....
Заранее спасибо!!!!!