Moin !
Ich habe da gerade folgendes Konstrukt:
Delphi-Quellcode:
procedure TPipeServer.Execute;
var
I, Written: Cardinal;
InMsg, OutMsg: RPIPEMessage;
begin
while not Terminated do
begin
if FHandle = INVALID_HANDLE_VALUE then
begin
// suspend thread for 250 milliseconds and try again
Sleep(250);
end else begin
if ConnectNamedPipe(FHandle, nil) then
try
// read data from pipe
InMsg.Size := SizeOf(InMsg);
ReadFile(FHandle, InMsg, InMsg.Size, InMsg.Size, nil);
if
(InMsg.Kind = 0) and
(StrPas(InMsg.Data) = cShutDownMsg + FPipeName)
then
begin
// process shut down
OutMsg.Kind := 0;
OutMsg.Count := 3;
OutMsg.Data := 'OK'#0;
Terminate;
end else begin
// data send to pipe should be processed here
OutMsg := InMsg;
// we'll just reverse the data sent, byte-by-byte
Data := InMsg.Data;
MainForm.ProcessCommand(Data);
//for I := 0 to Pred(InMsg.Count) do
// OutMsg.Data[Pred(InMsg.Count) - I] := InMsg.Data[I];
OutMsg.Data := 'OK';
end;
CalcMsgSize(OutMsg);
WriteFile(FHandle, OutMsg, OutMsg.Size, Written, nil);
finally
DisconnectNamedPipe(FHandle);
end;
end;
end;
end;
Das ist ein Teil der Pipe Demo von hier:
http://www.delphi3000.com/articles/article_2918.asp?SK=
Das funzt auch alles ganz prächtig und auch die Pipe klappt. Aber wie kriege ich jetzt die Daten die ich per Pipe gesendet habe in meine Hauptanwendung?
Im Code gibt es die Stelle "Data := InMsg.Data;". Data ist mal nur ein String.
So ich steck da aber noch mitten in dem Thread drin. Wenn ich nun die Daten an meine Hauptanwendung übergeben lasse (mittels MainForm.ProcessCommand(Data); ) und dort z.B. versuche ein
MDI Child zu erzeugen, dann hängt die Anwendung.
Hintergrund: Ich will über die Pipe Commands senden können welche dann in der Hauptanwendung bestimmte Reaktionen hervorufen.
Kann mir jemand nen Tip geben wie ich nun die Daten aus dem Thread in meine Hauptanwendung bekomme und die dort verarbeiten kann?