function ReadXmlNodeByNodeName(): pchar;
var
  widestr:WideString;
  str:string;
begin
  widestr:='1234';
  pch:=pchar(widestr);
  setlength(str,Length(widestr));
  for  i:=1 to length(str) do
      str[i]:=char(widestr[i]);
  //str:=WideCharToString(PWideChar(widestr));  这种方式转换也一样错误 
  Result:=pchar(str);   
end;
调用
var
  pVal:pchar;
  pVal:=ReadXmlNodeByNodeName();
  ShowMessage(pVal);//报错 access violation at address XXX问题出在,在ReadXmlNodeByNodeName中会获得一个widestring 值,然后必须将这个widestring以pchar返回。
我测试过如果是获取一个string类型的然后转换成pchar就没有问题, 我猜应该是编码格式转换的问题 ??请大家帮看下 谢谢

解决方案 »

  1.   

    function ReadXmlNodeByNodeName(): pchar;
    var
      i: Integer;
      widestr:WideString;
      str:string;
    begin
      widestr:='1234';
      str:=pchar(widestr);
      setlength(str,Length(widestr));
      for i:=1 to length(str) do
      str[i]:=char(widestr[i]);
      Result:=pchar(str);
    end;procedure TForm1.btn1Click(Sender: TObject);
    var
      pVal:pchar;
    begin
      pVal:=ReadXmlNodeByNodeName();
      ShowMessage(pVal);
    end;
    这个没有错误
      

  2.   

    setlength(str,Length(widestr));这句话有问题,Length(widestr)这个长度肯定会小,如果遇到汉字或全角,长度就会缩水
      

  3.   

    void fun(para1,para2:pchar)str:string;widestr:widestring;widestr:='225.0.0.21';str:=widestr;fun(para1,pchar(str));
      

  4.   

    WideString转String,直接赋值就可以了,然后再把String转为PChar返回。
      

  5.   

    先确定一下你的delphi的版本,pchar到底指向mbcs串还是ucs串,前几天我遇到了这个问题,d7中pchar是指向mbcs,d2010是指向ucs。