procedure xxx;
var
p:Pointer;
xx:pchar;
i:integer;
begin
xx:='xxx';
p=@nr;
xxxxx(p); //传递指针到下一个函数
end;问题: 这样写有没错误?xx:pchar; 如何定义一个固定的长度(如128个字节);不够用空格补全.
var
p:Pointer;
xx:pchar;
i:integer;
begin
xx:='xxx';
p=@nr;
xxxxx(p); //传递指针到下一个函数
end;问题: 这样写有没错误?xx:pchar; 如何定义一个固定的长度(如128个字节);不够用空格补全.
p:Pointer;
xx:array[0..127] of char;;
i:integer;
begin
xx:='xxx';
p:=@xx;
xxxxx(p); //传递指针到下一个函数
end;这样不就行了吗?
procedure xxx;
var
p:Pointer;
xx:PChar;
i:integer;
begin
xx:=PChar(Copy('xxx' + StringOfChar(' ', 128), 1, 128));
p:=xx; //xx本身就是指针,再用@取地址运算,意思就完全变了样了
xxxxx(p); //传递指针到下一个函数
end;
xx: array[0..127] of Char;
str: string;
begin
FillChar(xx, SizeOf(xx), ' ');
str := 'test';
CopyMemory(@xx[0], PChar(str), Length(str));
ShowMessage(xx);
end;
nr???procedure xxx;
var
p:Pointer;
xx:pchar;
i:integer;
begin
GetMem(xx,128);
xx := 'xxx';
p := xx;
xxxxx(p); //传递指针到下一个函数
FreeMem(xx);
end;
procedure hhcall(hhnr:pointer);
Var
ecx1:integer;
adderss:pointer;
begin
adderss:=pointer($xxxxxx);
ecx1:=integer(pointer($xxxxxx)^);
asm
pushad
mov ecx,ecx1
push ecx
mov eax,hhnr; //说话内容 此处直接写游戏某个含有文本的内存地址是可以的(如$xxxxxxxx)
push ecx
mov edx, $00000001 ; 说话频道 01是附近
push edx
call adderss
popad
end;
end;
///=================================游戏说话call====================================
procedure xxx;
var
p:Pointer;
xx:pchar;
i:integer;
begin
xx:='说话内容';
p=@xx;
xxxxx(p); //传递指针到下一个函数 //把说话内容指针传给下说话call
end;
运行游戏就关闭了...............
hhcall(p); //传递指针到下一个函数 //把说话内容指针传给下说话call
其中nr是什么????