[VBScript] 傳遞陣列到 VB6 的物件

話說前篇:

[VBScript] VB6 Variant 變數傳遞給 VBScript 的相容檢討

這次我的需求是倒過來。

一般變數都沒有問題,這次發現問題的,仍然又是陣列。

我在 VB6 呼叫 Script 來處理我的自訂巨集時,允許 VBScript 使用透過 VB6 傳遞過來的物件。寫好了下去測,怎樣都不能跑,所以我又從頭建立測試函數與測試方法,這部分非常重要,即使 IDE 提供良好的除錯,但是該建立測試程式碼片段時,不要自視過高,不屑去建立,你會發現建立測試程式碼有助於你更深入了解狀況,也可有效節省測試時間。

由於要說明的是觀念,就以測試程式碼為例。

[VB6] 某物件的方法

Public Function Test(Byval vArray)

Test = vArray(1)

End Function

[VBScript]呼叫的測試例

Function SendArray(Byval obj)

ReDim arr(1)

arr(1) = 1

SendArray = obj.Test(arr)

End Function

在這樣的程式碼中,VB6 的方法會被直接跳過,因為呼叫的引數型態不同。看不出來吧?因為都是用 Variant 隱含性宣告,實在搞不懂哪裡不同。

後來發現,使用

arr = Array(0, 1)

取代

ReDim arr(1)

arr(1) = 1

居然可以跑,推想應該是 Array 是明確的 Variant Array ,跟 ReDim 宣告的略有不同,如前篇討論三種記憶體模式,但因為在 VBScript 中沒辦法去變數查記憶體,只好作罷。

所以在 VBScript 那邊寫個宣告函數解決。

Function ReDimVariant(Byval vUBound)

arr = Array(0)

ReDim arr(vUBound)

ReDimVariant = arr

End Function

搞了我半天在查到底哪裡錯誤…

Categories: 工作點滴, 技術分享 | 1 則迴響

文章導覽

One thought on “[VBScript] 傳遞陣列到 VB6 的物件

  1. 通告: [VBScript] 單緒有 Timeout 的 AJAX | 鄭子璉

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

在WordPress.com寫網誌.

%d 位部落客按了讚: