Delphi的BASM使用,调函数
function TForm1.MyShowMessage(str1: string): integer;
//这个begin之后就报内存地址错误,求原因
//【注】如果我MyShowMessage为全局时,程序没错
//但都为Form1时,报内存地址错误。
begin
asm
push eax
mov eax, str1
call showmessage
pop eax
end;
Result:= 0;
end;
procedure TForm1.Button4Click(Sender: TObject);
var
str: string;
begin
if CheckBox1.Checked then
str:= str + #13 + CheckBox1.Caption;
if CheckBox2.Checked then
str:= str + #13 + CheckBox2.Caption;
if CheckBox3.Checked then
str:= str + #13 + CheckBox3.Caption;
asm
mov eax, str
call MyShowMessage
end;
// MyShowMessage(str);
end;
答案:MyShowMessage 是一个函数,所以第一个传递进去的参数就不是eax而是edx了,你的例子改成这样就可以执行了,但是你不保存寄存器是不保险。
asm
mov edx, str
call MyShowMessage
end;
上一个:c++, javascript,java,delphi中有没大数阶乘,相乘,相除等现成的函数?
下一个:delphi7好书推荐