=======Pchar!!!!!!!!!!!I 服了 YOU============
今天改写一个DLL里面的string成pchar,痛苦啊!!!!!!!
于是开始研究,测试代码如下:
测试环境:D6
操作系统:WIN 2000 SP4
//传递pchar参数,然后返回pchar参数!!!
function TForm1.test(const str: PChar): Pchar;
var
s:string;
begin
s:=str;
result:=Pchar(s+#0);
//result:=Pchar(s);
end;
//测试功能1
procedure TForm1.Button2Click(Sender: TObject);
var
ss:string;
begin
ss:='11100';
E_Enc.Text:=test(Pchar(ss));//
E_Dec.Text:=test(Pchar(ss));//
end;
procedure TForm1.Button3Click(Sender: TObject);
var
sd:Pchar;
ss:string;
begin
ss:='22200';
sd:=test(Pchar(ss));
//ss:=sd;
E_Enc.Text:=sd;//
E_Dec.text:=sd;//
end;
测试1:
先点击Button2,编辑框E_Enc和E_Dec都是11100。这个结果正确。
然后点击Button3,怪事就来了。E_Enc显示22200--正确,E_Dec显示1110--错误。
再点击Button3,依然奇怪,E_Enc显示22200--正确,E_Dec显示2220--错误
===================
测试2:
pchar应该是一个指针,以0结尾,会不会把最后的0当成结束符号去掉了啊!我继续测试
把BUTTON2里面的SS修改为'111000',BUTTON3的SS修改为'222000'。
先点击Button2,编辑框E_Enc和E_Dec都是111000。这个结果正确。
然后点击Button3,怪事就来了。E_Enc显示222000--正确,E_Dec显示111000--错误。
再点击Button3,依然奇怪,E_Enc显示222000--正确,E_Dec显示222000--正确
我要抓狂了。难道奇数个字符就会错误,偶数个就不会?
还是PCHAR我没有管理好内存???于是我决定在一个函数的入口和出口的时候,
使用PCHAR,在内部处理使用STRING。
继续测试
=================================
测试3:
修改BUTTON3函数如下
procedure TForm1.Button3Click(Sender: TObject);
var
sd:Pchar;
ss:string;
begin
ss:='22200';
sd:=test(Pchar(ss));
ss:=sd;
E_Enc.Text:=ss;//
E_Dec.text:=ss;//
end;
这下E_Enc和E_Dec都显示正确了。
分析测试2和测试3的不同。在于使用PCHAR和STRING上。但既然SD是PCHAR类型,应该是指针,为什么赋值
两个edit后,会有不一样呢?原因一直分析不出来。
================================
求救:哪位大哥可以帮我分析PCHAR和string在使用上的不同和注意点,包括
把string类型的字符串转换为pchar作为参数传递进函数内部,并作为参数传递出来,
再转换为string有什么要注意的地方。