TclDDE

TclDDEはWindowsベースのプロセス間ダイナミックデータ交換機能を提供します。

Tclアプリケーション間の通信はもとより、他の言語で作成されたWindowsアプリケーションとの通信ができます。
TclDDEとTclPipeはコマンド構造が大変似ています。
機能的にも後者がネットワーク対応であることを除き酷似しています。
TclDDEの有利な点は、VBにおいてDDEが標準的にサポートされていることです。
VBプログラマとTclプログラマはDDEによって互いのアプリケーションを相互利用することができます。
TclアプリケーションはTclDDE(ddeコマンド)によってDDEサーバにもDDEクライアントにもなることができます。

TclアプリケーションがDDEサーバになるためにはdde Serverコマンドを実行します。
そしてクライアントが実行を要求するプロシージャを用意します。
VBアプリケーションがDDEサーバになるにはFormのLinkModeプロパティを1にセットします。
そしてLinkExecuteイベントプロシージャに、クライアントから送られたコマンド文字列に従った処理を記述します。

TclアプリケーションがDDEクライアントになるにはdde Clientコマンドでサーバに接続してから、dde Sendでコマンドをリモート実行します。
またサーバ側の変数値を参照したい時は[dde Get]コマンドを用います。
VBではLabelやTextBoxのコントロールがDDEクライアントになることが可能です。
LinkTopicやLinkItemプロパティにサーバの仕様にしたがった文字列を与えるだけです。
Tclがサーバの場合はTclの変数とリンクさせることになります。

サーバ起動
クライアント起動
サーバへのコマンド送信
サーバの変数参照
サーバとの通信切断
DDE終了

サーバ起動

斜体は省略可能なアーギュメント。...は複数指定可能を示します。

dde Server $SourceName $Topic

$SourceName
サーバになる自分のソース名を宣言。
一般にはEXEやfrmなどの拡張子を除いたファイル名
$Topic
自分のトピック名を宣言。
戻り値
成功すると1を返す。失敗すると0を返す。

クライアント起動

dde Client $SourceName $Topic

$SourceName
接続するサーバのソース名を指定。
一般にはEXEやfrmなどの拡張子を除いたファイル名
$Topic
接続するサーバのトピック名を指定。
戻り値
成功すると通信チャンネル番号が返される。
このチャンネル番号は以降の通信に必要なので変数に受けること。
失敗すると0が返される。

サーバへのコマンド送信

dde Send $ComID $ServerCommand $Timeout

$ComID
dde Clientで取得した通信チャンネル番号を指定。
$ServerCommand
サーバへのコマンド文字列。
サーバがTclアプリケーションなら、サーバ側のプロシージャ名とそのアーギュメントを指定する。
ブランクも渡したい場合は{}を忘れぬこと。
サーバがVBアプリケーションなら、このコマンド文字列はForm_LinkExecuteイベントプロシージャのCmdStr引数に渡される。
$Timeout
dde Sendコマンドは同期トランザクションでサーバからの応答を待つので、そのタイムアウト時間をミリセコンドで指定する。省略すると5000ms。

サーバの変数参照

dde Get $ServerVariable $Timeout

$ComID
dde Clientで取得した通信チャンネル番号を指定。
$ServerVariable
サーバの変数名。
サーバがTclアプリケーションなら、TclResultを指定すると直前に実行したDDEコマンドの戻り値が返される。
サーバが他のアプリケーションならアプリケーションの仕様に従う。
例えばサーバがExcelなら、行列を指定する。
2行3列のセルは"R2C3"である。
またExcelの場合、トピック名をシート名にして接続する。
$Timeout
dde Sendコマンドは同期トランザクションでサーバからの応答を待つので、そのタイムアウト時間をミリセコンドで指定する。省略すると5000ms。

サーバとの通信切断

dde Stop $ComID

$ComID
dde Clientで取得した通信回線IDを指定。

※通信回線を切断するが、サーバを停止するわけではない。
再度dde Clientコマンドで接続可能。

DDE終了

dde Close

WindowsへDDE終了を知らせる。
再度dde Clientコマンドで接続可能。