Delphi 使用管道进程间通讯


本文整理自网络,侵删。

 
发起进程:创建管道,发送数据,接受反馈数据

Const  
  PipeName = '\\.\pipe\Test';  
  PipeSize = 1000;  
  PipeTimeOut = 3000;  
  
procedure PipeServer();  
var  
  Se:TSecurityAttributes;  
  SPipeHandle:THandle;  
  Buffer:Pchar;  
  WriteBuffer:DWORD;  
begin  
  Se.nLength:=Sizeof(TSecurityAttributes);  
  Se.lpSecurityDescriptor:=nil;  
  Se.bInheritHandle:=True;  
  SPipeHandle:=CreateNamedPipe(PipeName,  
  PIPE_ACCESS_DUPLEX OR FILE_FLAG_WRITE_THROUGH,  
  PIPE_TYPE_BYTE   or   PIPE_WAIT,  
  1,PipeSize,PipeSize,PipeTimeOut,@Se);  
  Buffer:=AllocMem(1000);  
  if SPipeHandle<> 0 then  
    begin  
      while True do  
        begin  
          if ConnectNamedPipe(SPipeHandle,nil) then  
            begin  
               Buffer:=PChar(IntToStr(GetTickCount));  
               //写入数据  
               WriteFile(SPipeHandle,Buffer[0],Length(Buffer),WriteBuffer,nil);  
               Sleep(500);  
               //等待反馈数据  
               ReadFile(SPipeHandle,Buffer[0],PipeSize,WriteBuffer,nil);  
               DisConnectNamedPipe(SPipeHandle);  
            end;  
          Sleep(2000);  
        end;  
       CloseHandle(SPipeHandle);  
    end;  
  FreeMemory(Buffer);  
end;  

监听进程:接受数据,反馈数据

Const  
  PipeName = '\\.\pipe\Test';  
  PipeSize = 1000;  
  
procedure PipeClient();  
var    
  Buffer:Array [0..1000] of Char;    
  Requst:PChar;    
  ReadSize:DWORD;    
  hPipe:Thandle;  
begin    
 while True do     
  begin       
   if WaitNamedPipe(PipeName,NMPWAIT_WAIT_FOREVER) then       
     begin         
       hPipe:=CreateFile(PipeName,GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ or FILE_SHARE_WRITE,NiL,  
OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE or FILE_FLAG_WRITE_THROUGH, 0);   
       if hPipe <> INVALID_HANDLE_VALUE   then      
         begin         
           ReadSize:=0;        
           ReadFile(hPipe,Buffer[0],PipeSize,ReadSize,nil);      
           if ReadSize > 0 then       
            begin               
            //收到数据        
              Requst:= Pchar(Format('%s OK',[Buffer]));      
            //写入反馈             
              WriteFile(hPipe,Requst[0],Length(Requst),ReadSize,nil);      
            end;       
          CloseHandle(hPipe);      
         end;      
    end;   
  end;  
end;  

相关阅读 >>

Delphi 判断文件存在的一个api函数

Delphi 合并动态数组

Delphi 三种方式读取txt文本文件

Delphi 把一个ico转换为bmp

Delphi中轻松实现tidftp的断点续传

Delphi udl文件创建

Delphi xe 提权代码

Delphi 系统服务和普通forms程序共存一体的实现

Delphi 去掉警告

Delphi实现抓屏压缩并保存桌面图片

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...