Microsoft Windowsプラットフォームは、OLE、COM、... DDEなどのいくつかのメカニズムを提供します。
DDEは1987年に導入され、後にNetDDEのネットワーク実装があり、現在も使用されています。
DDEの操作は非常に簡単です。追加モジュールをCPANに接続する必要はありません。すべてがtkkitにあります。
受信者と送信者の2つのアプリケーションの例を考えてみましょう。

habrakatの下の説明とコード。
動作するには、ddeパッケージを接続する必要があります
Tclでは、次のようになります。
パッケージにはddeが必要です
プログラムが情報を交換し始める前に、「私たちのサーバー」の名前を指定する必要があります。
それを「PerlDDE」にします
受信プログラムは、次の2つのコマンドをラップできます。
メッセージ-メッセージを表示する

およびoops-ユーザーがクライアントプログラムを閉じたときに呼び出されます。
私たちの前にこのような悲しい絵があります:

受信プログラムのコード:
#!/ usr / bin / perl 厳格な使用; 機能 ':5.10'を使用します。 Tkxを使用します。 #作業用モジュールをDDEに接続します Tkx :: package_require( 'dde'); #ハンドラーを設定する Tkx :: dde_servername(-handler => \&dde_handle、 'PerlDDE'); #ウィンドウを作成する my%UI =(); my $ mw = Tkx :: widget-> new( '。'); $ mw-> g_wm_title( 'Perl / Tkx DDE'); $ mw-> g_wm_minsize(qw(300 200)); my $ label = $ mw-> new_ttk__label(-text => 'Receiver:'); 私の$エントリ= $ mw-> new_ttk__entry(-textvariable => \ $ UI {entry}、 -state => 'readonly'); Tkx :: grid($ラベル、-row => 0、-column => 0、-sticky => 'ew'、-padx => 4、-pady => 4); Tkx :: grid($エントリ、-row => 1、-column => 0、-sticky => 'ew'、-padx => 4、-pady => 4); Tkx :: grid(columnconfigure => $ mw、0、-weight => 1); Tkx :: MainLoop(); 1; sub dde_handle { PROCESS_DDE_ARGS: foreach my $ ddeval(@_){ next PROCESS_DDE_ARGS if ref($ ddeval); $ UI {entry} = $ ddeval; my($ key、$ value)= Tkx :: SplitList($ ddeval); given($キー){ when( 'message'){ Tkx :: tk ___ messageBox( -title => 'DDE Receiver'、 -message => "受信したメッセージ:\ n $値"、 )長さ$値の場合; } when( 'oops'){ $ UI {entry} = 'エラー、送信者は終了しました'; } #... } } }
送信者コード:
#!/ usr / bin / perl 厳格な使用; Tkxを使用します。 Tkx :: package_require( 'dde'); my%UI; my $ mw = Tkx :: widget-> new( '。'); $ mw-> g_wm_title( 'Perl / Tkx DDE'); $ mw-> g_wm_minsize(qw(300 200)); my $ label = $ mw-> new_ttk__label(-text => 'Sender:'); my $ copy = $ mw-> new_ttk__label(-text => 'santeri.habrahabr.ru'); 私の$ msg_e = $ mw-> new_ttk__entry(-textvariable => \ $ UI {msg}); 私の$ msg_b = $ mw-> new_ttk__button( -text => 'Message :)'、 -command => sub { send_message(メッセージ=> $ UI {msg}); }、 ); Tkx :: bind($ msg_e => '<Return>'、sub { $ msg_b-> invoke(); }); #プログラムを閉じると $ mw-> g_wm_protocol(WM_DELETE_WINDOW => sub { send_message( 'oops'); $ mw-> g_destroy(); }); Tkx :: grid($ラベル、-row => 0、-column => 0、-sticky => 'ew'、-padx => 4、-pady => 4); Tkx :: grid($ msg_e、-row => 1、-column => 0、-sticky => 'ew'、-padx => 4、-pady => 4); Tkx :: grid($ msg_b、-row => 1、-column => 1、-sticky => 'ew'、-padx => 4、-pady => 4); Tkx :: grid($ copy、-row => 2、-column => 0、-sticky => 'se'、-padx => 4、-pady => 4、 -columnspan => 2); Tkx :: grid(rowconfigure => $ mw、2、-weight => 1); Tkx :: grid(columnconfigure => $ mw、0、-weight => 1); Tkx :: MainLoop(); 1; #TclEval-TclのDDEサービス名 sub send_message { my($ key、$ val)= @_; return if!定義された$キー; eval { 私の$値= $ val || q {}; Tkx :: dde_execute(TclEval => 'PerlDDE'、 "$ key {$ value}"); }; }
参照:
http://en.wikipedia.org/wiki/Dynamic_Data_Exchange
http://tmml.sourceforge.net/doc/tcl/dde.html
PS:
DDEを使用して、Windows用のアプリケーションをテストし、エクスプローラー、Internet Explorer、Firefoxで作業します...
大規模プロジェクトのWin32 :: OLEでは、DBusの方が優れています。
将来、DDEは削除される可能性があります:)