Delphi-PRAXiS :: Das Forum für Fragen zu Delphi
Das Experten Forum für Delphi Programmierer
Hilfe für CodeGear Delphi gibts es hier im Forum
Delphi Quelltexte und Source Codes
 
Delphi-PRAXiS :: Foren-ÜbersichtForen-Übersicht Delphi-PRAXiS Modul-ÜbersichtSite-Map Delphi-PRAXiS durchsuchenSuchen Delphi-PRAXiS Code-LibraryCode-Library Jetzt registrieren!Registrieren Login  
   
 
0
 
Delphi für Win32
Messages bei Named Pipes?
Ein Delphi (Win32)-Thema von schöni.

Vorheriges Thema anzeigen  |  Nächstes Thema anzeigen
Neuen Beitrag schreiben Auf Beitrag antworten
als PDF-Datei herunterladenThema ausdrucken
 
Delphi-PRAXiS Forum - Übersicht -> Windows API / MS.NET Framework API
Seite 1 von 1   [ 1 Beitrag ]  
 
 Autor 
 Nachricht 
 
schöni #1|Beitrag #1128350Verfasst am: 08.02.2010, 18:56      Titel: Messages bei Named Pipes? Antworten mit Zitat
aktives Mitglied
Status: offline
Beiträge: 309
angemeldet: 23.01.2005
Wohnort: Dresden
Delphi 7 Personal

Sprache: Delphi (Win32)

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: zusammenfalten | markieren
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.

 Zuletzt bearbeitet von schöni am 09.02.2010, 10:17, insgesamt 2-mal bearbeitet.
nach oben nach unten
Benutzer-Profile anzeigen Private Nachricht senden
Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen im Forum zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Google zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Wikipedia zu suchen.
 
Anzeige-Optionen:    
 
Delphi-PRAXiS Forum - Übersicht -> Windows API / MS.NET Framework API Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1   [ 1 Beitrag ]  
 
  Neuen Beitrag schreiben Auf Beitrag antworten
als PDF-Datei herunterladenThema ausdrucken
 
   
Gehe zu:  
Du darfst keine Beiträge in dieses Forum schreiben.
Du darfst auf Beiträge in diesem Forum nicht antworten.
Du darfst Deine Beiträge in diesem Forum nicht bearbeiten.
Du darfst Deine Beiträge in diesem Forum nicht löschen.
Du darfst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten.
Du kannst Dateien in diesem Forum nicht herunterladen.


Impressum / Kontakt
Allgemeine Geschäftsbedingungen
Verhaltenskodex & FAQ

Delphi-PRAXiS :: Das Forum für Delphi-Programmierer
Das Experten Forum für Delphi ProgrammiererHilfe für Borland Delphi gibts es hier im ForumDelphi Quelltexte und Source CodesDelphi-PRAXiS :: Das Forum für DelphiWindows APIInternet und NetzwerkeVCL und Datenbanken
 

Delphi-PRAXiS V.2005 III
© 2002-2010 by Daniel R. Wolf
powered by phpBB © phpBB Group

Impressum / Kontakt Allgemeine Geschäftsbedingungen