2008年6月2日 星期一

VB DLL 和 TCL 的應用

'################# VB DLL Class 設定 ###########
'### 開啟 VB 的 DLL 專案,並且命名為 ReCallDLL
'### 新增一個 Class 檔案 ,命名為 clsReCallDLL
'###---------- 加入以下程式碼 -----------------

Public Function testAB(a() As Variant, b()As Variant) As String
    '組合第一個陣列內容
   testAB = "aryStr = " & a(0) & b(0)
End Function

Public Function mathadd(a As Double, b As Double) As Double
    '兩數相加
   mathadd = a + b
End Function

Public Function mathadd2(a As Variant) As String
    '傳回傳入字串
   mathadd2 = "The Value is = " & a
End Function
'###----------------------------------------

################# TCL 的執行 Scrip ###########
### TCL 載入 DLL

package require tcom
::tcom::import ReCallDLL.dll     ;#採用動態(未安裝 DLL)載入
### 若是靜態(事先安裝DLL)載入則用下面的方法
#set comUtil [::ReCallDLL::clsReCallDLL]
### 建立連接端

set comUtil [::tcom::ref createobject "ReCallDLL.clsReCallDLL"]

### TCL 執行 DLL
set b "1 2"    ;#將 b 設為 List ,因為設成陣列Array 傳遞時會出現錯誤
set c "3 4"    ;#將 c 設為 List ,因為設成陣列Array 傳遞時會出現錯誤
set a [$comUtil testAB b c]    ;#呼叫 DLL 並執行其中的一個 testAB Function
### 傳回 aryStr = 13
set b 12     ;#將 b 設為單一數字
set c 23    ;#將 c 設為單一數字
set a [$comUtil mathadd bl cl] ;#呼叫 DLL 並執行 mathadd 將兩數相加並傳回
## 傳回 35

2 則留言:

  1. 請問當我下了

    ::tcom::import RecallDLL.dll
    0x80029c4a {載入類型程式庫/DLL 時發生錯誤。}
    這是啥問題呢

    回覆刪除
  2. 應該是你的DLL未載入
    可以在VB中直接按下執行,然後由 TCL 去CALL 它(動態載入),甚至可以在VB中設中斷點,
    當 TCL Call 到其中的 Function 時就會暫停,
    另一個方式就是把程式編譯成DLL並且註冊,
    然後使用靜態載入的方式呼叫DLL也行。

    回覆刪除