Entwickler-Ecke

Dateizugriff - PipeServer funtioniert nicht richtig


LittleBen - So 08.09.13 18:57
Titel: PipeServer funtioniert nicht richtig
N'Abend,
habe mir soebend die Pipe.pas runtergeladen (http://www.delphipraxis.net/attachments/23616-%5Bunit%5D-errorlog-uerrorlog_149.pas), aber leider keine Demo gefunden. Das Ganze läuft bei mir in einer Konsolen-Andwendung. Hier mein Code:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
program WaitProjector;

{$APPTYPE CONSOLE}

uses
  Windows, 
  Messages,
  SysUtils,
  Classes,
  Pipes in '..\WaitServer\Pipes.pas';

type
  TPipeEventHandler =  class(TObject)
  public
   procedure OnPipeConnect(Sender: TObject; Pipe: HPIPE);
   procedure OnPipeMessage(Sender: TObject; Pipe: HPIPE; Stream: TStream);
   procedure OnPipeSent(Sender: TObject; Pipe: HPIPE; Size: DWORD);
  end;

var Msg: TMsg;
    PSHandler: TPipeServer;
    PEHandler: TPipeEventHandler;
    Test: integer = 0;

procedure TPipeEventHandler.OnPipeConnect(Sender: TObject; Pipe: HPIPE);
begin
 Test:= 1;
end;

procedure TPipeEventHandler.OnPipeMessage(Sender: TObject; Pipe: HPIPE; Stream: TStream);
begin
 Test:= 2;
end;

procedure TPipeEventHandler.OnPipeSent(Sender: TObject; Pipe: HPIPE; Size: DWORD);
begin
 Test:= 3;
end;

begin
 PeekMessage(Msg, 0, WM_USER, WM_USER, PM_NOREMOVE);

 PSHandler:= TPipeServer.CreateUnowned;
 PEHandler:= TPipeEventHandler.Create;

 PSHandler.PipeName:='WaitServer';
 PSHandler.OnPipeConnect:= PSHandler.OnPipeConnect;
 PSHandler.OnPipeMessage:=PSHandler.OnPipeMessage;
 PSHandler.OnPipeSent:= PSHandler.OnPipeSent;
 PSHandler.Active:= true;

 while true do
 begin
  {...}
  while PeekMessage(Msg, 000, PM_REMOVE) do DispatchMessage(Msg);
  writeLn(inttostr(Test)); // Mit PSHandler.ClientCount kann man sehen, dass 1 Verbindung besteht
 end;
end.

Der Client (von hier abgeschrieben http://stackoverflow.com/questions/512366/how-do-i-send-a-string-from-one-instance-of-my-delphi-program-to-another) schickt die Nachricht und der Server verbindet sich auch mit dem Client, aber keines der Events wird ausgelöst. Hat jemand eine Idee wie es funktionieren könnte?

Viele Grüße
Littleben


Xion - Mo 09.09.13 13:49

user profile iconLittleBen hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
2:
3:
 PSHandler.OnPipeConnect:= PSHandler.OnPipeConnect;
 PSHandler.OnPipeMessage:=PSHandler.OnPipeMessage;
 PSHandler.OnPipeSent:= PSHandler.OnPipeSent;

[...] aber keines der Events wird ausgelöst.


Das wundert mich nicht. :mrgreen: Du musst auch die Handler deiner eigenen Klasse zuweisen.


LittleBen - Mo 09.09.13 14:58

:autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch:
Ich sag dazu einfach mal nichts...