我建了一个dll ,其中的一个函数中包含1000个字符以上的返回数据,返回类型为pchar,调用时它大概返回了1000左右的字符,请问各位大侠,如何才能获得完整的返回值!!!

解决方案 »

  1.   

    var
      p:pchar;
    getmem(p,2000);
    申请空间时搞大点
      

  2.   

    但我在dll内部字符的处理是使用string的
    当返回的时候才将返回字符转化为pchar型的
    var
      valback:string;
      p:pchar;
    begin
      valback=valback+ 'dddddddddddddd.....';
      valback=valback+'......';
      getmem(p,2000);
      p:=pchar(valback);
      result:=p;
    end;
    但返回好像还是不完整,(有时完整,有时不完整,每次返回都不一样)
      

  3.   

    但我在dll内部字符的处理是使用string的
    当返回的时候才将返回字符转化为pchar型的
    var
      valback:string;
      p:pchar;
    begin
      valback:=valback+ 'dddddddddddddd.....';
      valback:=valback+'......';
      getmem(p,2000);
      p:=pchar(valback);
      result:=p;
    end;
    但返回好像还是不完整,(有时完整,有时不完整,每次返回都不一样)
      

  4.   

    使用StrAlloc分配PChar的空间,使用StrDispose释放PChar空间
    var
      p :PChar;
    begin
      p :=StrAlloc(1001);
      p := 1000个字符;
      ShowMessage(StrPas(p));
      StrDispose(p);
    end;
      

  5.   

    // 试试 :getmem(p,2000);
    StrCopy(p,ValBack) ;
      

  6.   

    手动分配存储空间应该不会出现这样的问题了吧
    因为String是DELPHI的类型,在WIN 32 API中是没有的
    所以要用Pchar类型
      

  7.   

    getmem(p,2000);
    StrCopy(p,ValBack) ;
      

  8.   


    valback:=valback+'......';
    如果valback正确   getmem(p,length(valback)+1);
      strpcopy(p,valback);
      如果 valback中有#0 则 显示就只有一部分了