Delphi Edit1.text 是什么类型的?
varS:Pchar;D:dword;beginS:=Pchar(edit1.Text);asmpushadmovecx,smoveax,[ecx+$c]movd,eax...
var
S:Pchar;
D:dword;
begin
S:=Pchar(edit1.Text);
asm
pushad
mov ecx,s
mov eax,[ecx+$c]
mov d,eax
popad
end;
memo1.Lines.Clear;
memo1.Lines.Add(inttohex(d,$8));
这段代码显示的值是, 00950031
var
S:Pchar;
D:dword;
begin
S:=Pchar('threeqtest001');
asm
pushad
mov ecx,s
mov eax,[ecx+$c]
mov d,eax
popad
end;
memo1.Lines.Clear;
memo1.Lines.Add(inttohex(d,$8));
这段显示的值是: 00000031
内容是一样的,怎么会这样... 展开
S:Pchar;
D:dword;
begin
S:=Pchar(edit1.Text);
asm
pushad
mov ecx,s
mov eax,[ecx+$c]
mov d,eax
popad
end;
memo1.Lines.Clear;
memo1.Lines.Add(inttohex(d,$8));
这段代码显示的值是, 00950031
var
S:Pchar;
D:dword;
begin
S:=Pchar('threeqtest001');
asm
pushad
mov ecx,s
mov eax,[ecx+$c]
mov d,eax
popad
end;
memo1.Lines.Clear;
memo1.Lines.Add(inttohex(d,$8));
这段显示的值是: 00000031
内容是一样的,怎么会这样... 展开
4个回答
展开全部
S:Pchar;
这句你S申明的类型是pchar,是个指针类型,Edit1.text的类型是string类型,我们知道delphi里的string类型有个特点,就是当一个字符串被重复引用时,它不会去复制一份字串出来,而是给string类型内置的有一项叫引用计数加1,实际指向还是最原始的地址,在这例就是edit1.text的地址,所以Pchar(edit1.Text)和直接pchar('threeqtest001')是不同的,哪怕你edit1.Text的值就是'threeqtest001'.
原因是Pchar(edit1.Text)传的是text的指针,而pchar('threeqtest001')传的是函数体内一个字符串的指针。edit1.Text 和你函数体内字符串的内存地址显然是不同的
这句你S申明的类型是pchar,是个指针类型,Edit1.text的类型是string类型,我们知道delphi里的string类型有个特点,就是当一个字符串被重复引用时,它不会去复制一份字串出来,而是给string类型内置的有一项叫引用计数加1,实际指向还是最原始的地址,在这例就是edit1.text的地址,所以Pchar(edit1.Text)和直接pchar('threeqtest001')是不同的,哪怕你edit1.Text的值就是'threeqtest001'.
原因是Pchar(edit1.Text)传的是text的指针,而pchar('threeqtest001')传的是函数体内一个字符串的指针。edit1.Text 和你函数体内字符串的内存地址显然是不同的
展开全部
这两段代码都嵌入了汇编语言.咱也搞不懂.edit1.text肯定是字符串类型.但它通过Pchar('threeqtest001');语句进行了强制转换.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
function TCustomEdit.GetSelText: string;
var
P: PChar;
SelStart, Len: Integer;
begin
SelStart := GetSelStart;
Len := GetSelLength;
SetString(Result, PChar(nil), Len);
if Len <> 0 then
begin
P := StrAlloc(GetTextLen + 1);
try
GetTextBuf(P, StrBufSize(P));
Move(P[SelStart], Pointer(Result)^, Len);
finally
StrDispose(P);
end;
end;
end;
var
P: PChar;
SelStart, Len: Integer;
begin
SelStart := GetSelStart;
Len := GetSelLength;
SetString(Result, PChar(nil), Len);
if Len <> 0 then
begin
P := StrAlloc(GetTextLen + 1);
try
GetTextBuf(P, StrBufSize(P));
Move(P[SelStart], Pointer(Result)^, Len);
finally
StrDispose(P);
end;
end;
end;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-09-08
展开全部
应该是皮肤一类的把 能给分就给分吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询