实际上动态数组就是一个指针,所以
CopyMemory(@Buffer,sTemp,3);应当改为CopyMemory(Buffer,sTemp,3);
同样
CopyMemory(PChar(sStr),Buffer,2);
就应当可以了

解决方案 »

  1.   

    procedure TForm1.Button2Click(Sender: TObject);
    var
      sTemp,pTemp:PChar;
      sStr:string;
      Buffer:array of byte;
    begin
      sTemp:='123';
      SetLength(Buffer,10);
      CopyMemory(Buffer,sTemp,3);
      SetLength(sStr,2);
      CopyMemory(PChar(sStr),Buffer,2);
      ShowMessage(sStr);
    end;
    可以看一下:
     procedure CopyMemory(Destination: Pointer; Source: Pointer; Length: DWORD);
    begin
      Move(Source^, Destination^, Length);
    end;
    copymemory的参数已经是地址,所以不用再用@.
      

  2.   

    PChar 是字符指针呀,你没有对其分配内存!string 变量直接赋值就可以了,干吗用CopyMemoryvar
      sTemp,pTemp:string;
      sStr:string;
      Buffer:array of byte;
    begin
      sTemp:='12345';
      SetLength(Buffer,10);
      CopyMemory(@Buffer,@sTemp[1],3);
      SetLength(sStr,2);
      sStr:=Copy(Buffer,1,2);
      ShowMessage(sStr);
    end;试试吧!应该可以的!