当前位置:编程学习 > Delphi >>

Delphi Edit1.text 是什么类型的?

补充: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;
这句你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;

上一个:如何用delphi做一个通讯录
下一个:在Delphi 怎么能让多个指向同一张表查询的DataSet实现数据操作同步?

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,