procedure TForm1.Button1Click(Sender: TObject); --开启接收的mailslot var sSlotName: String; begin sSlotName := '\\.\mailslot\messngr'; FSHandle := CreateMailslot( pchar(sSlotName), // MailSlot 识别名称 0, // 讯息长度的最大值,设为零表示不限 MAILSLOT_WAIT_FOREVER, // read time-out nil); // 安全属性,先暂时采用预设值 if FSHandle = INVALID_HANDLE_VALUE then ShowMessage('不行啊'); end;
procedure TForm1.Button2Click(Sender: TObject); --手动读取实际用时用计时器就行了 var NextSize: DWORD; MessageCount: DWORD; result: longbool; buffer: Pchar; begin Result := GetMailslotInfo(Fshandle, nil, NextSize, @MessageCount, nil); if not Result or (NextSize = MAILSLOT_NO_MESSAGE) then Exit; // 如果还有资料 (MessageCount <> 0),逐一读出资料 while Result and (MessageCount <> 0) do begin // 资料的长度 Buffer := AllocMem(NextSize + 1); try // 读出资料 FileRead(Fshandle, Buffer^, NextSize); Memo1.Lines.Add(buffer); finally FreeMem(Buffer, NextSize + 1); end;
Result := GetMailslotInfo(Fshandle, nil, NextSize, @MessageCount, nil); end;