AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Zugriff auf Named Pipe ohne Netzanschluss
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriff auf Named Pipe ohne Netzanschluss

Ein Thema von norwegen60 · begonnen am 8. Mär 2014 · letzter Beitrag vom 8. Mär 2014
Antwort Antwort
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
505 Beiträge
 
Delphi 12 Athens
 
#1

Zugriff auf Named Pipe ohne Netzanschluss

  Alt 8. Mär 2014, 13:23
Hallo zusammen.

ich verwende seit längerem Gerätetreibe z.B. für Kraftanzeigen, über die ich per Named Pipe von einem anderen Programm zugreife. Beide Programme laufen i.d.R. auf demselben Rechner. Das funktioniert unter XP und Win7 so weit auch einwandfrei. Das anlegen erfolgt über
Delphi-Quellcode:
  PipeName :PChar = '\\.\pipe\ForcePipe'+ #0 ;
    fPipe := CreateNamedPipe(PipeName, PIPE_ACCESS_DUPLEX,
     PIPE_TYPE_Message or PIPE_READMODE_Byte or PIPE_WAIT,
     PIPE_UNLIMITED_INSTANCES, 225, 255, NMPWAIT_USE_DEFAULT_WAIT, nil);
    if (fPipe <> INVALID_HANDLE_VALUE) then
      //Warten auf Clientzugriff
      bConnected := ConnectNamedPipe(FPipe, nil);
Jetzt habe ich einen XP-Rechner, der in keinem Netzwerk hängt und da funktioniert der Zugriff nicht. Mit
Delphi-Quellcode:
  pipe := '\\PC01.\pipe\ForcePipe';
  send := 'GETFORCE';

  if CallNamedPipe(PChar(pipe),
    @send[1],   // address of write buffer
    length(send),   // size, in bytes, of write buffer
    @recv[1],   // address of read buffer
    sizeof(recv),   // size, in bytes, of read buffer
    re,   // address of number of bytes read
    3000    // time-out time, in milliseconds
  ) then
  begin
    d := re;
    panel3.caption := recv;
  end
  else
    ShowMessage('Kein Connect zu ' + pipe);
bekomme ich die Meldung "Kein Connect zu \\PC01.\pipe\ForcePipe"
Sobald ich den Rechner mit einem Netz verbinde klappt es.

Was muss ich tun, damit NamedPipe auch bei einem Standalone-Rechner klappt?

Danke
Gerd
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: Zugriff auf Named Pipe ohne Netzanschluss

  Alt 8. Mär 2014, 14:19
Warum verwendest du im unteren Codeschnipsel denn '\\PC01.\pipe\ForcePipe' statt wie oben '\\.\pipe\ForcePipe'? Der PC01 DNS Name wird nur verfügbar sein, wenn du im Netzwerk bist. Der einfache Punkt beschreibt immer den lokalen Host.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

AW: Zugriff auf Named Pipe ohne Netzanschluss

  Alt 8. Mär 2014, 14:33
Der Rechner heißt wirklich "PC01." und nicht nur "PC01"?

Aber ansonsten nannte Zacherl ja schon den Grund.



Zitat:
ShowMessage('Kein Connect zu ' + pipe);
Das ist auch keine Fehlerbehandlung.

Man mag es nicht glauben, aber CallNamedPipe sagt einem, was es für ein Problem gab.



Ach ja, was sind send und recv eigentlich?
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Zugriff auf Named Pipe ohne Netzanschluss

  Alt 8. Mär 2014, 15:01
Man mag es nicht glauben, aber CallNamedPipe sagt einem, was es für ein Problem gab.
Richtig und konkret siehe Doku:
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Zitat:
If the function fails, the return value is zero. To get extended error information, call GetLastError.
Sprich:
Delphi-Quellcode:
if CallNamedPipe(...
    ...
  else
    ShowMessage('Kein Connect zu ' + pipe + ':'#13#10 + SysErrorMessage(GetLastError));
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
505 Beiträge
 
Delphi 12 Athens
 
#5

AW: Zugriff auf Named Pipe ohne Netzanschluss

  Alt 8. Mär 2014, 18:28
Hallo,

vielen Dank für das schnelle Feedback

Warum verwendest du im unteren Codeschnipsel denn '\\PC01.\pipe\ForcePipe' statt wie oben '\\.\pipe\ForcePipe'? Der PC01 DNS Name wird nur verfügbar sein, wenn du im Netzwerk bist. Der einfache Punkt beschreibt immer den lokalen Host.
Das mit dem Punkt wusste ich nicht. Ich hatte es mit 127.0.0.1 probiert, aber auch erfolglos. Jetzt mit . funktioniert es
Man mag es nicht glauben, aber CallNamedPipe sagt einem, was es für ein Problem gab.
In den richtigen Treibern habe ich das auch irgendwann implementiert. In der Demo wars noch vereinfacht
Ach ja, was sind send und recv eigentlich?
send enthält den Commandstring
recv den Rückgabewert als String

Problem ist für mich gelöst

Danke
Gerd
  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 22:51 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