【问题标题】:passing multidimensional array from asp to vb6 dll将多维数组从 asp 传递到 vb6 dll
【发布时间】:2013-05-14 16:30:32
【问题描述】:

我已经尝试了所有其他相关主题的所有可用帮助,但没有解决问题,代码如下

VB6(DLL 代码):

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

平均售价:

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")

代码报错:

Microsoft VBScript 运行时错误“800a0009” 下标超出范围

我试过删除多维数组,只发送普通数组,同样的错误仍然存​​在。

我还尝试在传递数组时删除括号 (),例如 (objdll.EnterOrder(values , ordhdr)

) 它给出类型不匹配错误。

我的 VB6 代码接受字符串数组,但我按照一些关于帮助主题的指南将其更改为变体类型,这也没有帮助。

相同的代码可以工作,如果我将此 dll 添加到 vb6 项目引用中,然后调用相同的函数,它会完美运行。但是用asp的相同代码不起作用。

谢谢。

【问题讨论】:

  • 也试过了,还是不行
  • 同样的错误,好像我从函数调用中删除了括号,它说“预期语句结束”所以为了函数调用我需要在函数调用之前删除变量赋值
  • 如果我从函数调用中删除括号和变量赋值,它会调用函数并显示相同的错误
  • 它说类型不匹配
  • 是的,我把它改成了变体

标签: arrays dll asp-classic vb6


【解决方案1】:

声明变体时去掉 ()

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

【讨论】:

    【解决方案2】:

    好的,谢谢你的帮助,但我已经解决了。我做了一些研究,得到的答案是,在将参数从 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))
    

    主要的事情是在传递参数时,我用括号将变量包装起来,因为没有它就无法工作,用参数包装它使它像一个表达式,所以它起作用了。

    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 时我放置了数组的索引。没有它就无法工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-16
      • 2011-09-02
      • 2023-03-27
      • 2018-10-16
      • 2011-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多