一个简单的mailslot的控件:
http://www.torry.net/vcl/lan/comms/cbmailslot.zip

解决方案 »

  1.   

    procedure TForm1.MailSlot1ReceiveData(Data: Pointer; Size: Cardinal);
    var f:string;
    begin
         memo1.Text:=strpas(pchar(data));end;
    上边是我的一段代码,data的结构如下
    数据              长度
    head               4byte    这个是数据头是个字符串
    aa                   2
    bb                   3
    cc                   5
    就是这种结构
    我用上边的代码不能接到aa bb cc
    这怎么办
      

  2.   

    //参考1
    type
      TMyRecord = packed record
        head: array[0..3] of Char;
        aa: array[0..1] of Char;
        bb: array[0..2] of Char;
        cc: array[0..2] of Char;
      end;
      PMyRecord = ^TMyRecord;
    var
      vMyRecord: PMyRecord;
    begin
      vMyRecord := Data;
    end;
      

  3.   

    //直接放在你的函数中
    begin
      vMyRecord := Data;
      ShowMessage(vMyRecord^.aa);
      ShowMessage(vMyRecord^.bb);
    end;
      

  4.   

    我说的是type部分定义在哪个部位
    定义在引用下还是别的地方
      

  5.   

    procedure TForm1.MailSlot1ReceiveData(Data: Pointer; Size: Cardinal);
    type
      TMyRecord = packed record
        head: array[0..3] of Char;
        aa: array[0..1] of Char;
        bb: array[0..2] of Char;
        cc: array[0..2] of Char;
      end;
      PMyRecord = ^TMyRecord;
    var
      vMyRecord: PMyRecord;
    begin
      vMyRecord := Data;
      ShowMessage(vMyRecord^.aa);
      ShowMessage(vMyRecord^.bb);
    end;
      

  6.   

    type
      TMyRecord = packed record
        head: array[0..3] of Char;
        aa: array[0..1] of Char;
        bb: array[0..2] of Char;
        cc: array[0..2] of Char;
      end;
      PMyRecord = ^TMyRecord;
    var
      vMyRecord: PMyRecord;
    begin
      vMyRecord := Data;
    end;
      

  7.   

    这个问题主要还是怎样对这个结构进行转换,伴水兄你这样能把内存中的二进制的流转化为字符串吗
    我的代码
    procedure TForm1.MailSlot1ReceiveData(Data: Pointer; Size: Cardinal);
    type
      TMyRecord = packed record
        head: array[0..3] of Char;
        aa: array[0..1] of Char;
        bb: array[0..2] of Char;
        cc: array[0..2] of Char;
      end;
      PMyRecord = ^TMyRecord;
    var
      vMyRecord: PMyRecord;
    begin
      vMyRecord := Data;
      edit1.Text :=vmyrecord^.aa;
      memo1.Text:=strpas(pchar(data));
      //ShowMessage(vMyRecord^.aa);
     // ShowMessage(vMyRecord^.bb);
    end;
    memo1就8能显示头四位,而edit1什么都不显示!
    为什么
      

  8.   

    客户端的数据我压根就没见到,我的任务是在他们给我的资料的基础上搞定这个任务,您的程序我又试了,接受头4位没问题,可是和我的转换一样,后边的没法收到字符串,不知道这是为什么,他们用vc编的,可以从内存中指定的位置读取几位,然后在进行转换,那个函数叫memcpy,可是delphi中我没找到这个函数,在vc中是
    Return Value
    memcpy returns the value of dest.
    Parameters
    dest
    New buffer
    src
    Buffer to copy from
    count
    您给看看吧
    我也是快疯了Number of characters to copy