本帖最后由 fbiboss 于 2013-05-21 14:53:58 编辑

解决方案 »

  1.   

    我们给字符指针申请内存主要是为了在 API 中接受数据, 如果我们要直接赋给常量值, 系统会自动分配内存的, 譬如:
    --------------------------------------------------------------------------------var
      p: PChar;
    begin
      p := '万一的 Delphi 博客';
      ShowMessage(p); {万一的 Delphi 博客}
    end;
    --------------------------------------------------------------------------------
    当然我们也可以用这种办法申请内存, 就是笨了点, 譬如:
    --------------------------------------------------------------------------------//获取系统目录
    var
      p: PChar;
    begin
      p := PChar(StringOfChar(Char(0), 256)); {反复一个空字符 256 次成一个字符串, 然后转为 PChar}
      GetSystemDirectory(p, StrBufSize(p));
      ShowMessage(p); {C:\WINDOWS\system32}
    end;
    --------------------------------------------------------------------------------
    如果在 API 函数需要的字符指针是为了输入, 当然也不需要申请内存, 譬如:
    --------------------------------------------------------------------------------//设置窗口标题
    var
      p: PChar;
    begin
      p := '窗口新标题';
      SetWindowText(Handle, p);
    end;
      

  2.   

    跨进程的话分配内存用 GlobalAllocPtr 和 GlobalFreePtr
      

  3.   

    可以直接p:='fee';,D默认字符串PCHAR和字符数组可相互转化