Ich möchte zwischen Programmen Daten mittels IPC austauschen. Unter Windows klappt der folgende Code wunderbar nur nicht unter Linux:
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, simpleipc, FileUtil, Forms, Controls, Graphics, Dialogs,
StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Test: TEdit;
SendMessage: TButton;
ClientStart: TButton;
Serverstart: TButton;
Memo1: TMemo;
SimpleIPCClient1: TSimpleIPCClient;
SimpleIPCServer1: TSimpleIPCServer;
procedure SendMessageClick(Sender: TObject);
procedure ClientStartClick(Sender: TObject);
procedure ServerstartClick(Sender: TObject);
procedure SimpleIPCServer1Message(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.SimpleIPCServer1Message(Sender: TObject);
var s: String;
begin
s := SimpleIPCServer1.StringMessage;
Memo1.Lines.Add('--> '+s);
end;
procedure TForm1.SendMessageClick(Sender: TObject);
begin
if SimpleIPCClient1.Active
then SimpleIPCClient1.SendStringMessage(Test.Text)
else Memo1.Lines.Add('Erst den Client starten!');
end;
procedure TForm1.ClientStartClick(Sender: TObject);
begin
Memo1.Lines.Add('Starte Client');
SimpleIPCClient1.ServerID := 'test';
if SimpleIPCClient1.ServerRunning
then SimpleIPCClient1.Connect
else Memo1.Lines.Add('kein Server!');
end;
procedure TForm1.ServerstartClick(Sender: TObject);
begin
Memo1.Lines.Add('Starte Server');
SimpleIPCServer1.ServerID := 'test';
SimpleIPCServer1.Global := True;
SimpleIPCServer1.StartServer;
end;
end.
Es kommt keine Fehlermeldung hoch.
Ist das bei Euch auch so? Hat jeman eine Ahnung warum?
Meine Umgebung
- Windows 8.1: Lazarus 1.2.4, FPC 2.6.4
- Linux Debian GNU/Linux 7.7 (wheezy): Lazarus 1.2.4, FPC 2.6.4 (i386-gtk2)
Viele Grüße
Willi4Willi