Hallo, hier bin ich schon wieder
Habe mir die Komponente NPipe (
code.google.com/p/th...2FComponents%2FNPipe) aus Komfortgründen heruntergeladen. In einer normalen Anwendung, also mit Formular, funktioniert das Kommunizieren zwischen Client und Server wunderbar. Doch sobald ich den gleichen (selben) Code in einer Konsolenanwendung (oder DLL) benutze, funktioniert nüschts mehr...Kann ja eigentlich nicht daran liegen, dass kein Handle vorhanden ist, da Pipes ja Handle unabhängig sind?
Mein Code:
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: 59: 60: 61: 62: 63: 64: 65: 66:
| program Console_Server;
{$APPTYPE CONSOLE}
uses Windows, Classes, Messages, SysUtils, NPipe_Server, NPipe_Types;
var NPipeServer: TNPipeServer;
type TIncomingData = class(TObject) private FIncomingData: TNP_OnIncomingData; public constructor Create; procedure NPipeServerIncomingData(Sender: TObject; Data: TMemoryStream; var Reply: TMemoryStream); end;
{$R *.res}
procedure TIncomingData.NPipeServerIncomingData(Sender: TObject; Data: TMemoryStream; var Reply: TMemoryStream); var sl: TStrings; begin WriteLn('Funktioniert'); sl:=TStringList.Create; sl.Add('Done'); sl.SaveToStream(Reply); sl.Free; end;
constructor TIncomingData.Create; begin inherited; @FIncomingData:= @TIncomingData.NPipeServerIncomingData; end;
procedure MainProc; var IncomingData: TIncomingData; Msg: TMsg; begin IncomingData:= TIncomingData.Create; NPipeServer:= TNPipeServer.Create(nil); NPipeServer.OnIncomingData:= IncomingData.NPipeServerIncomingData; NPipeServer.PipeName:= 'Crotonic'; NPipeServer.LocalAccessOnly:= true; NPipeServer.Timeout:= 50; NPipeServer.Active:= true;
while GetMessage(Msg, 0, 0, 0) do begin TranslateMessage(Msg); DispatchMessage(Msg); end;
NPipeServer.Free; IncomingData.Free; end;
begin MainProc; end. |