【发布时间】:2022-08-11 08:42:15
【问题描述】:
谁能告诉我为什么这段代码在 Delphi 7 中有效,但在 10.4 版中却出现内存错误?
procedure ChatPrintf(ChatPrintMSG: PChar);
var
ChatPrint: Cardinal;
procedure ChatPrintASM(ChatPrintMSG: PChar); assembler;
asm
lea edx, [ChatPrintMSG]
push edx
call [ChatPrint]
pop edx
end;
begin
ChatPrint := $009E0C30;
ChatPrintASM(ChatPrintMSG);
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
ChatPrintf(\'it: works\');
end;
-
Stack Overflow 是一个英文网站。
-
总之:在 Delphi 2009 中,字符串从 Ansi(每个字符 1 个字节)变为 Unicode(每个字符 2 个字节)。这可能是问题所在。
-
你为什么要编写asm代码?
-
在这段代码中根本没有充分的理由使用汇编。可以使用纯 Pascal 重写,例如:
procedure ChatPrintf(ChatPrintMSG: PAnsiChar); type ChatPrintProc = procedure(Msg: PAnsiChar); cdecl; var ChatPrint: ChatPrintProc; begin ChatPrint := ChatPrintProc($009E0C30); ChatPrint(ChatPrintMSG); end;
标签: delphi pascal delphi-10.4.2