Autor Beitrag
LittleBen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 258
Erhaltene Danke: 4

Win 7, Mac OS
Delphi 7
BeitragVerfasst: Mo 27.08.12 16:04 
Hallo, hier bin ich schon wieder :P
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:
ausblenden volle Höhe 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:
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, 000do
 begin
  TranslateMessage(Msg);
  DispatchMessage(Msg);
 end;

 NPipeServer.Free;
 IncomingData.Free;
end;

begin
 MainProc;
end.
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Di 28.08.12 00:23 
Ich war in dieser Ecke noch nie unterwegs, aber laut msdn.microsoft.com/e...644936(v=vs.85).aspx
könnte das HWND IMHO doch ein Problem darstellen

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS