建议你把作为返回值得那个PCHAR也放在函数的参数里。

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
      var
        ss:pchar;
        ss1:string;
    begin
        ss1 := 'lzj';
        showmessage(strpas(get_name(PChar(ss1))));
    end;
      

  2.   

    错误之处在于没有给ss分配内存使用。
    应该首先
      GetMem(ss1, 100);另外,可以简化你的程序。
    function get_name(nm:pchar):pchar;stdcall;
    var
      ss: string;
          begin
            ss:='your name is'+string(nm);
            result:=PChar(ss);
          end;
      

  3.   

    chechy(chechy)你好,问题依旧.
    你的第一个方法只是把我的程序简化了,不会有实质作用,我试了.
    第二个方法我也试了,依然抱错.
    能否在帮忙看看,先行谢过!   
      

  4.   

    如果全部用我的方法,可以回避内存分配的问题。
    否则,两边都需要在使用前分配内存。
    GetMem(ss1, 100);
      

  5.   

    因为string是采用引用计数技术的,计数为0则释放了。函数返回时使用pchar时,ss已经释放,故返回的指针指向无效的内存了,而使用string时计数>0,故正常。
      

  6.   

    你可以看看帮助!在使用strPcopy时,明确要求要对Pchar类型分配内存呀!如果你要使用StrPcopy的话,就应该对STRPCOPY的第一个参数分配内存!或者直接用chechy(chechy)的方法
    function get_name(nm:pchar):pchar;stdcall;
    var
      ss: string;
          begin
            ss:='your name is'+string(nm);
            result:=PChar(ss);
          end;