procedure TForm1.FormCreate(Sender: TObject);
var
  p1, p2, p3: Pointer;
  p4: Pointer;
  iSize1, iSize2: integer;
begin
  iSize1 := 10;
  iSize2 := 10;
  GetMem( p1, iSize1 );
  GetMem( p2, iSize2 );
  FillChar( p1^, iSize1, 'a' );
  FillChar( p2^, iSize2, 'b' );
  GetMem( p3, iSize1 + iSize2 );
  p4 := Pointer( DWORD(p3) + iSize1 );
  try
    Move( p1^, p3^, iSize1 );
    Move( p2^, p4^, iSize2 );
    showmessage( string( pchar( p3 ) ) );
  finally
    FreeMem( P1 );
    FreeMem( P2 );
    FreeMem( P3 );
  end;
end;

解决方案 »

  1.   

    我自己经解决了var tmpP : pointer;
    beginbuffer3 := allocMem(size1 + size2);
    tmpP := buffer3;   //保存首地址
    move(buffer1^, buffer3^, size1);
    buffer3 := pointer(integer(buffer) + size1); //将buffer3指针往后移一个size1位置
    move(buffer2^, buffer3^, size2);
    buffer3 := tmpP;//复位
    ......end;读取buffer3的指针时同理可读出。
    欢迎继续讨论,还有分没分呢!!!!!
      

  2.   

    补充说明:
    ShowMessage 的结果 'aaaa...b....'的长度可能不止20个字节,那是因为
    p3所指的内存字符b的后面不是#0的缘故,不是代码的问题。
      

  3.   

    一点建议:
    integer(buffer) + size1
    这里的integer 不是很好(虽然可以用),因为Pointer是指针,是无符号类型的DWORD,
    所以最好强制转换为DWORD。
      

  4.   

    赫赫,就是嘛,这么简单的问题也问?*^@#($&~~~~~~~~别打我.申请Size1+size2的长度的内存给Buffer3,首先Copy Buffer1的内容到Buffer3,然后移动Buffer3的指针到Buffer3+Size1处,然后在Copy Buffer2的内容不就可以了?看样子80丰太多了~~~~~~~~~``