AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Messages bei Named Pipes?

Ein Thema von schöni · begonnen am 8. Feb 2010
Antwort Antwort
schöni

Registriert seit: 23. Jan 2005
Ort: Dresden
445 Beiträge
 
Delphi 7 Personal
 
#1

Messages bei Named Pipes?

  Alt 8. Feb 2010, 18:56
Hallo,

Ein besserer Titel fällt mir leider nicht ein.

Angeregt durch die Fragen einens anderen DP Nutzers bezüglich Named Pipes habe ich da auch mal bissl getöbert und eine Lösung gefunfen, bei der zwischen Pipe Client und Pipe Server in beiden Richtungen Daten ausgetauscht werden können. Dabei wird aber beim Senden ein Button betätigt, beim Empfangen noch einmal ein Button, der den Empfang der Daten auslöst.

Nun meine Überlegung: Das sollte doch auch über Windows Messages zu steuern sein. An Stelle der Ereignisse BtnSendClick / BtnReceiveClick müsste doch auch eine Windows Message gesendet werden können. Geht das dann analog der Message Schleife in einer gewöhlichen Anwendung, was ich mir wegen der zwie entfernten Programme nicht vorstellen kann, oder geht das vielmehr über die Overlapped Struktur, die ich optional als letzten Parameter bei RedFile() bzw. Writefile() übergeben kann.

Ich will vom PipeClient aus den Server mit Kommandos steuern. Da nun eh das Flag PIPE_TYPE_MESSAGE gesetzt ist, sollte das doch mit Windows Messages klappen?

Aber wie mach ich das hier? Genügt es, den Overlapped-Puffer mit zu übergeben und dort die Message rein zu packen, oder muss ich mehr machen. Leider ist das MSDN nicht besonders verständlich, um dort Informationen darüber zu gewinnen.

Um außerdem ein Ereignis auslösen zu können, muss ich ja eine WMxxxxx Methode schreiben, die die Message in ein VCL Ereignis umwandelt.



Statt BtnSendClick() brauche ich ein Ereignis OnDataAvailable

Statt BtnReceiveClick brauche ich ein Ereignis OnCommandToExecute

im Server

und im Client

statt BtnSendClick() -> OnServerCommandToExecute
statt BtnReceiveClick -> OnDataFromServerAvailable


Werd mir jezt erst mal das WinAPI Handbuch zu Gemüte Führen.

Delphi-Quellcode:
procedure TfrmPipeSrv.FormCreate(Sender: TObject);
var
   FSA : SECURITY_ATTRIBUTES;
   FSD : SECURITY_DESCRIPTOR;
   pch1: shortstring;
begin
   InitializeSecurityDescriptor(@FSD, SECURITY_DESCRIPTOR_REVISION);
   SetSecurityDescriptorDacl(@FSD, True, nil, False);
   FSA.lpSecurityDescriptor := @FSD;
   FSA.nLength := sizeof(SECURITY_ATTRIBUTES);
   FSA.bInheritHandle := True;

   Pipe:= CreateNamedPipe(PChar('\\.\pipe\<test>'),
                          PIPE_ACCESS_DUPLEX or FILE_FLAG_WRITE_THROUGH,
                          PIPE_TYPE_MESSAGE or PIPE_READMODE_MESSAGE or PIPE_NOWAIT,
                          PIPE_UNLIMITED_INSTANCES,
                          1024,
                          1024,
                          50,
                          @FSA);

end;

procedure TfrmPipeSrv.btnSendClick(Sender: TObject);
var
   buffer: shortstring;
   dw : dword;
   b1 : boolean;
begin
  buffer := pServer.Lines[0];
  WriteFile(Pipe, buffer, sizeof(buffer), dw, nil);
end;

procedure TfrmPipeSrv.btnReceiveClick(Sender: TObject);
var
   buffer: shortstring;
   dw : dword;
begin
  ReadFile(Pipe, buffer, sizeof(buffer), dw, nil);
  pServer.Lines.Add(buffer);
end;
Wenn ich mehr weiß, werde ich das hier kundtun. Villeicht sogar als kleines Tutorial!
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz