隠れTcl DLL
 では前のページの方法でもっと役立つDLLを、 ということで、やっぱり作ってしまいましたとさ。 このDLLは、Visual Basic(VB)やPowerBuilder(PB)から、 Tcl/TkコマンドやTcl/Tkスクリプトファイルを文字列と渡して実行させ、 結果をVBやPBで取得できるようにするDLLです。

● ダウンロード
 ソースプログラムとコンパイル済みDLL(30KB)です。

● VisualBasicでの使い方
 DLLはどこかパスの通ったところに置きます。で、 VisualBasicの場合、 コードモジュールの(General)-(Declarations)部に

Declare Function Etcl_Start Lib "kakuretcl.dll" _
  () As Long
Declare Function Etcl_End Lib "kakuretcl.dll" _
  (ByVal id As Long) As Long
Declare Function Etcl_Eval Lib "kakuretcl.dll" _
  (ByVal id As Long, ByVal cmd As String, _
   ByVal result As String, ByVal maxlen As Long) As Long
Declare Function Etcl_EvalFile Lib "kakuretcl.dll" _
  (ByVal id As Long, ByVal filename As String, _
   ByVal result As String, ByVal maxlen As Long) As Long
このように書いておけば、TclコマンドがVB内部で実行できるようになります。
dim interp, r as long
dim result as string

interp = Etcl_Start()
result = String(256, vbNullChar)
r = Etcl_Eval(interp, "expr 3+5", result, 255)
if r <> 0 then
  MsgBox("error:" + result);
else
  MsgBox("result=" + result);
end if
Etcl_End(interp)
なんとなくわかります…よね?よね? Excel97での動作を確認しています。

● PowerBuilderでの使い方
 今度も、KAKURETCL.DLLはどこかパスの通った場所に置きます。 Tclコマンドを呼び出したいペインタで、 「グローバル外部関数」か「ローカル外部関数」 のダイアログを出し、おもむろに

FUNCTION long Etcl_Start () LIBRARY "kakuretcl.dll"
FUNCTION long Etcl_End (long id) LIBRARY "kakuretcl.dll"
FUNCTION long Etcl_Eval (long id, string cmd, &
    REF string result, long maxlen) LIBRARY "kakuretcl.dll"
FUNCTION long Etcl_EvalFile (long id, string filename, &
    REF string result, long maxlen) LIBRARY "kakuretcl.dll"
と書いておきます。で、
int r
long ll_interp
string result

ll_interp = Etcl_Start()
r = Etcl_Eval(ll_interp, "expr 3+5", result, 1023)
mle_result.text = result
Etcl_End(ll_interp)
こんな感じです。PowerBuilderでは、Etcl_EvalとEtcl_EvalFile の4番目の引数はあまり意味をもちません。適当に大きな正の整数を指定してください。
こちらはPowerBuilder 5.0.01と5.0.03で動作を確認しています。

ActiveX&Java Top
(uploaded 2000/06/17 and not ever modified)

テレワークならECナビ Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!
無料ホームページ 無料のクレジットカード 海外格安航空券 海外旅行保険が無料! 海外ホテル