2013-05-20 63 views
0

我已經嘗試了適用於所有其他相關的話題每個幫助,但沒有整理出來的問題,代碼是如下傳遞多維數組從ASP到VB6的dll

VB6(DLL代碼):

Public Function enterorder(vals() As Variant, ordhdr() As Variant) As String 
................... code ............ 
enterorder = "done" 
End Function 

ASP:

SET objdll = server.createobject("dllproname.classname") 

Dim values(1, 4) 
Dim ordhdr(1) 
dim ret 
ordhdr(0) = "1012" 
ordhdr(1) = "ASP TESTING descript" 
values(0, 0) = "testing " 
values(0, 1) = "testing 2" 
values(0, 2) = "HO" 
values(0, 3) = "2.0000" 
values(0, 4) = "12.0000" 

values(1, 0) = "testing part 2 " 
values(1, 1) = "testing again" 
values(1, 2) = "HO" 
values(1, 3) = "2.0000" 
values(1, 4) = "12.0000" 

ret = objdll.EnterOrder(values(), ordhdr()) 
response.write("Done") 

的代碼給錯誤:

微軟的VBScript運行時錯誤'800a0009' 下標超出範圍

我已嘗試刪除多維數組,只發送正常數組,同樣的錯誤仍然存​​在。

我還試圖去除paranthesis(),同時通過像陣列(objdll.EnterOrder(values , ordhdr)

)它給類型不匹配的錯誤。

我的VB6代碼正在接受字符串數組,但我將其更改爲變體類型,遵循關於幫助主題的一些指導原則,這也沒有幫助。

相同的代碼工作,如果我將此dll添加到vb6項目引用,然後調用相同的功能,它的作品完美。但是與asp相同的代碼不起作用。

謝謝。

+0

也試過,也沒有工作 –

+0

同樣的錯誤,好像我從函數調用中刪除了palenthesis它說「預期的語句結束」,所以爲了函數調用我需要在函數前刪除變量賦值調用 –

+0

它調用該函數,並顯示相同的錯誤,如果我刪除pamentalhesis,也是從函數調用 –

回答

0

玉傢伙,感謝您的幫助的時候,但我得到它整理出來。我做了一些研究,得到的答案是,當從asp傳遞參數到dll(由vb6製作)時,唯一可用的數據類型是「Variant」。其次將數組傳遞給dll是相當困難的(我不會說這是不可能的,我在某處讀取它不允許將數組從asp傳遞給vb6 dll)。所以我做了字符串的值,並在vb6代碼做了分裂,所以我分裂後得到數組。

對於實例 ASP代碼:

dim values 
values = "a,b,c,d,e|f,g,h,i,j" 
strlen = "1,4" 
ret = objdll.EnterOrder((values), (dsordhdr),(strlen)) 

被同時傳遞參數,我把包梁與paranthesis變量,因爲它沒有沒有它的工作,與參數包裹它的主要事情使它像一個表達,所以它的工作。

VB6代碼

Public Function enterorder(ByVal valstring As Variant, ByVal ordhdrstring As Variant,  ByVal arrlenstr As Variant) As Variant 
    Dim vals() as string 
    Dim arrlen() As String 
    arrlen = Split(arrlenstr, ",") 
    ReDim vals(arrlen(0), arrlen(1)) As String 
    valarry = Split(valstring, "|") 
    For ind = 0 To UBound(valarry) 
     orval = Split(valarry(ind), ",") 
     For sind = 0 To UBound(orval) 
      vals(ind, sind) = orval(sind) 
      outstr = outstr & orval(sind) & "," 
     Next 

    Next 

所以它的工作這樣。 Redim是第一次聲明數組,並且在執行redim時我需要數組的索引。沒有它就沒有工作。

0

刪除()的變種聲明

Public Function enterorder(vals As Variant, ordhdr As Variant) As String