一段程序用addr 与 @ 来取地址,但结果不同,如下function Msg(a:integer;b:integer):integer;stdcall;
var
sa,sb:array [0..10] of char;
s:string;
begin
s:=intTostr(a);
StrPCopy (sa,s); s:=intTostr(b);
StrPCopy (sb,s);
MessageBox(0,Pchar(@sa),Pchar(@sb),MB_OK);
end;procedure TForm1.Button1Click(Sender: TObject);
var
p:pointer;
a,b:integer;
begin
p:=@Msg;
a:=22;
b:=11;
asm
push b
push a call addr(msg) //有错,出现非法操作
//call p //可以
end;
end;//请高手帮忙诊断
var
sa,sb:array [0..10] of char;
s:string;
begin
s:=intTostr(a);
StrPCopy (sa,s); s:=intTostr(b);
StrPCopy (sb,s);
MessageBox(0,Pchar(@sa),Pchar(@sb),MB_OK);
end;procedure TForm1.Button1Click(Sender: TObject);
var
p:pointer;
a,b:integer;
begin
p:=@Msg;
a:=22;
b:=11;
asm
push b
push a call addr(msg) //有错,出现非法操作
//call p //可以
end;
end;//请高手帮忙诊断
var
p:pointer;
a,b:integer;
begin
// p:=@Msg;
p:=addr(Msg);
a:=22;
b:=11;
asm
push b
push a // call addr(msg) //有错,出现非法操作
call p //可以
end;
end;
这样也没有问题
看来是Call 的用法有问题