本帖最后由 tataishan 于 2010-08-07 17:23:35 编辑

解决方案 »

  1.   

    newlpBuffers 是指针类型, 要先分配内存
    newlpBuffers.buf 是pchar内型,也要先分配内存var
      tmp: AnsiString;
      newlpBuffers: LPWSABUF;
    begin
      tmp := '1234567989';
      New(newlpBuffers);
      newlpBuffers.len := Length(tmp);
      newlpBuffers.buf := '123456789';
      

  2.   

    使用move的话,得先给 newlpBuffers.buf 分配内存
      

  3.   

    move之前加一句 setlength(tmp,newlpBuffers.len)
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      tmp: AnsiString;
      newlpBuffers: LPWSABUF;
    begin
      tmp := '1234567989';
      New(newlpBuffers);
      newlpBuffers.len := Length(tmp);
      Move(tmp[1], newlpBuffers.buf^, newlpBuffers.len); //这儿赋值出错...
      ShowMessage(newlpBuffers.buf^);
      Dispose(newlpBuffers);
    end;还是报错
      

  5.   

    to SuperTitan007move之前加一句 setlength(tmp,newlpBuffers.len)
    设置 tmp长度有何用
      

  6.   

    补上   LPWSABUF的定义{$EXTERNALSYM WSABUF}
      WSABUF = record
        len: u_long;    { the length of the buffer }
        buf: PAnsiChar; { the pointer to the buffer }
      end;
      {$NODEFINE TWSABuf}
      TWSABuf = WSABUF;
      {$NODEFINE PWSABuf}
      PWSABuf = ^TWSABuf;
      {$EXTERNALSYM LPWSABUF}
      LPWSABUF = PWSABUF;
      

  7.   

    上边不是和你说了
    Move(tmp[1], newlpBuffers.buf^, newlpBuffers.len); //这儿赋值出错...
    这样要先给newlpBuffers.buf分配内存
    GetMem(newlpBuffers.buf, newlpBuffers.Len);要不你就直接赋值
    newlpBuffers.buf := '123456';
      

  8.   

    TO sanguomi  知道了我还想问下GetMem(newlpBuffers.buf, newlpBuffers.Len);
    申请内存后如果newlpBuffers.buf长度改变了应该再怎样申请内存呢重新申请?
      

  9.   

    procedure ReallocMem(var P: Pointer; Size: Integer); {重新分配指定大小内存块,参数P必须是nil或者指向一个由GetMem, AllocMem, 或 ReallocMem分配的内存变量,其分配的内存是连续的,会把前面已有的数据移到新分配的内存中去}procedure New(var P: Pointer);   {为一个指针变量分配内存,会自动计算指针所指数据结构需要空的空间大小}procedure GetMem(var P: Pointer; Size: Integer); {分配一个指定大小的内存块(连续),并用P指向它}通常采用New分配内存比较好。一、New和GetMem都可以为指针类型动态分配内存,并且Delphi不会对由此分配的内存进行管理,即必须有相应的代码对其进行释放,否则内存将“丢失”,直到应用程序结束。   
     二、New分配的内存必须由Dispose来释放;GetMem分配的内存必须由FreeMem来释放;   
     三、New根据指针类型来自动计算需要分配的内存尺寸;GetMem必须指定尺寸;   
       
      因此,对于类型指针,一般用New和Dispose来进行管理;对于内存尺寸随机的指针(典型地如PChar),一般用GetMem和FreeMem来进行管理。从另一方面来说,在很多时候用哪一对例程都可以进行动态内存管理。
     
      

  10.   

    用ReallocMem(var P: Pointer; Size: Integer); 
    上一贴已有具体说明。