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

内容是一样的,怎么会这样...
展开
 我来答
百度网友09d4ae1
2011-09-08 · TA获得超过267个赞
知道小有建树答主
回答量:169
采纳率:0%
帮助的人:200万
展开全部
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 和你函数体内字符串的内存地址显然是不同的
liu55721
2011-09-08 · TA获得超过922个赞
知道大有可为答主
回答量:1861
采纳率:100%
帮助的人:861万
展开全部
这两段代码都嵌入了汇编语言.咱也搞不懂.edit1.text肯定是字符串类型.但它通过Pchar('threeqtest001');语句进行了强制转换.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
6rl
2011-09-08 · TA获得超过704个赞
知道小有建树答主
回答量:580
采纳率:66%
帮助的人:365万
展开全部
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;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-09-08
展开全部
应该是皮肤一类的把 能给分就给分吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式