procedure TForm1.Button3Click(Sender: TObject);
var
    s1:string;
    s2:string;
    filename: string;
    m1:TMemoryStream;
    buffer:array of byte;begin
    s1:='123';
    s2:='456';
    filename:=ExtractFilePath(paramstr(0))+'01.bmp';
    m1:=m1.Create;
    m1.LoadFromFile(filename);
    //现在怎么把 字符串 '123' '456' 和 流读到 数组 buffer;
end;//现在怎么把 字符串 '123' '456' 和 流读到 数组 buffer;
希望通过 CopyMemory 来实现?各位大哥这样的程序要怎么写?谢谢!

解决方案 »

  1.   


        setlength(buffer, 6+m1.size);
        b := @buf[0];
        CopyMemory(b, @s1[1], length(s1));
        inc(b, 3);
        CopyMemory(b, @s2[1], length(s1));
        inc(b, 3);
        Stream.Write(b, Stream.Size);不知道对不对
      

  2.   

    替universe(孤帆) 补充一下:
    var
      s1      : string;
      s2      : string;
      filename: string;
      m1      : TMemoryStream;
      buffer  : array of byte;
      b       : PByte;
    begin
        ......
        setlength(buffer, 6+m1.size);
        b := @buf[0];
        CopyMemory(b, @s1[1], length(s1));
        inc(b, 3);
        CopyMemory(b, @s2[1], length(s1));
        inc(b, 3);
        Stream.Seek(0, soFromBeginning);
        Stream.Write(b, Stream.Size);
    end;
      

  3.   

    jadeluo 大哥,您在啊!!!!
    请大哥再帮我看看下面这个问题:procedure TForm1.ClientSocket1Read(Sender: TObject;
      Socket: TCustomWinSocket);
    var
         len:longint;
         buffer:array of byte;
         m1:TMemoryStream;
         s1:string;
         s2:string;
    begin
         len:=Socket.ReceiveLength;
         Socket.ReceiveBuf(buffer,len);
         //现在怎么得到 字符串 '123' '456' 和 流 m1
         (意思,我需要把 1-3 个 赋给 s1 ,4-6 赋给 s2 ,后面的辅给流 m)
    end;谢谢!
      

  4.   

    大哥,您好!
    帮我看看这个问题,好吗?procedure TForm1.Button1Click(Sender: TObject);
    var
      s1      : string;
      s2      : string;
      buffer  : array of byte;
    begin
        s1:='123';
        s2:='456';
       setlength(buffer,6);
        CopyMemory(@buffer[0], @s1[1], length(s1));
        CopyMemory(@buffer[3], @s2[1], length(s2));
    end;编译时,提示 内存错误的那种
    这是什么原因?谢谢!
      

  5.   

    刚才提示内存问题,是因为我的 电脑 的问题
    procedure TForm1.ClientSocket1Read(Sender: TObject;
      Socket: TCustomWinSocket);
    var
         len:longint;
         buffer:array of byte;
         m1:TMemoryStream;
         s1:string;
         s2:string;
    begin
         len:=Socket.ReceiveLength;
         Socket.ReceiveBuf(buffer,len);
         //现在怎么得到 字符串 '123' '456' 和 流 m1
         (意思,我需要把 1-3 个 赋给 s1 ,4-6 赋给 s2 ,后面的辅给流 m)
    end;谢谢!
      

  6.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      s1      : string;
      s2      : string;
      buffer  : array of byte;
    begin
        s1:='123';
        s2:='456';
       setlength(buffer,6);
        CopyMemory(@buffer[0], @s1[1], length(s1));
        CopyMemory(@buffer[3], @s2[1], length(s2));
    end;编译时,提示 内存错误的那种
    这是什么原因?这段代码没看出有问题, 应该能正常编译的。
    有可能是Delphi本身有问题,造成编译时Delphi出错了。
      

  7.   

    procedure TForm1.ClientSocket1Read(Sender: TObject;  Socket: TCustomWinSocket);
    var
      len   : longint;
      rev   : Longint;
      buffer:array of byte;
      m1    :TMemoryStream;
      s1    :string;
      s2    :string;
    begin
      len:=Socket.ReceiveLength;
      SetLength(buffer, len);
      rev := Socket.ReceiveBuf(buffer,len);
      if rev >= 6 then
      begin
        SetLength(s1, 3);
        CopyMemory (@s1[1], @buffer[0], 3);
        SetLength(s2, 3);
        CopyMemory (@s2[1], @buffer[3], 3);
        m1 := TMemoryStream.Create;
        try
          m1.Seek(0, soFromBeginning);
          m1.Write(buffer[6], rev - 6);
          //可以开始处理s1, s2和m1的内容了
          ......
        finally
          FreeAndNil(m1);
        end;
      end;
      buffer := nil;
    end;
      

  8.   

    谢谢大哥,我重新装了偏系统,就没有那个问题了
    procedure TForm1.Button2Click(Sender: TObject);
    var
      s1: string;
      s2: string;
      s3: string;
      s4: string;
     // m1      : TMemoryStream;
      buffer  : array of byte;
    begin
        s1:='123';
        s2:='456';
        s3:=' ';
        s4:=' ';
       setlength(buffer,6);  // 申请空间
       CopyMemory(@buffer[0], @s1[1], length(s1)); //把字符串 '123' 拷贝到  buffer
       CopyMemory(@buffer[3], @s2[1], length(s2)); //把字符串 '456' 拷贝到  buffer
       CopyMemory(@s3[1],@buffer[0],3);            //得到前面 3个 字符
       CopyMemory(@s4[1],@buffer[3],3);            //得到 4-6 个字符
       showmessage(s3);
       showmessage(s4);end;错误是没有了
    但是 show 出的字符串 为 '12' ,'45'
    而不是 '123' ,'456'我哪里还错了?谢谢!