内存补丁

FeiXue_AL 2006-04-23 02:56:02
以下是VC代码。我转换成DELPHI 出了错误,请大家分析下。VC代码运行正确。DELPHI编译是正确的,但运行出错。
struct delphi_string
{
DWORD len;
char text[256];
};

void AddChatString(LPCTSTR string, COLORREF b=0xffffff, COLORREF f=0)
{
DWORD p=0x00479AE0;
delphi_string d;
ZeroMemory(&d,sizeof(d));
d.len=strlen(string);
strcpy(d.text,string);
DWORD t=(DWORD)d.text;
__asm
{
push eax
push edx
push ecx

push f
mov ecx, b
mov edx, [t]
mov eax, 004F7D8Ch
mov eax, [eax]
call p

pop ecx
pop edx
pop eax
}
}
////////////DELPHI
Tdelphi_string = packed record
len : DWORD;
text : string[255];
end;
procedure AddChatString(sstring:PAnsiChar; b:DWORD;f:DWORD);
const
p=$00479AE0;
var
d:Tdelphi_string;
t:DWORD;
begin
ZeroMemory(@d,sizeof(d));
d.len:=strlen(sstring);
d.text:=sstring;
t:=dword(@d.text);
asm

push eax
push edx
push ecx

push f
mov ecx, b
mov edx, t
mov eax, [$004F7D8C]
mov eax, [eax]
call [p]

pop ecx
pop edx
pop eax
end;
end;
...全文
190 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
FeiXue_AL 2006-04-24
  • 打赏
  • 举报
回复
顶以下。
FeiXue_AL 2006-04-24
  • 打赏
  • 举报
回复
非常感谢。不过我的问题还没有解决,我再研究下。
柯本 2006-04-24
  • 打赏
  • 举报
回复
的确
char text[256];

text : string[255];
的内存结构完全不一样,delphi的String第0个字节为长度,所以你要定义成
text :array [0..255] of char
FeiXue_AL 2006-04-23
  • 打赏
  • 举报
回复
我觉得是不是在 变量类型上2者不同。
c中
string="sss";
d.len=strlen(string);
strcpy(d.text,string);
DWORD t=(DWORD)d.text;
结果 t是 "sss"
d.len 长度是 3
d中
sstring="sss";
d.len:=strlen(sstring);
d.text:=sstring;
t:=dword(@d.text);
结果
t是 " sss"多了个 空格,长度 d.len 是3
不知道是为什么,后来我把t:=dword(@d.text);修改为 t:=dword(@d.text[1]); t是"sss"正常了,但还是有错误。
不解。。。。
FeiXue_AL 2006-04-23
  • 打赏
  • 举报
回复
非常感谢你,可还是不行c我编译测试了,完全正确。
柯本 2006-04-23
  • 打赏
  • 举报
回复
我不知VC的程序能否正确运行,只是感觉这里两者不一样:
C程序:
mov eax, 004F7D8Ch
mov eax, [eax]
D程序:
mov eax, [$004F7D8C]
mov eax, [eax]
改为
mov eax, $004F7D8C
试试

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧