VB的数组可不想你想得那么简单,看看MSDN中:
数据类型概述:
注意 任何数据类型的数组都需要 20 个字节的内存空间,加上每一数组维数占 4 个字节,再加上数据本身所占用的空间。数据所占用的内存空间可以用数据元数目乘上每个元素的大小加以计算。例如,以 4 个 2 字节之 Integer 数据元所组成的一维数组中的数据,占 8 个字节。这 8 个字节加上额外的 24 个字节,使得这个数组所需总内存空间为 32 个字节。你可以在VC中的DLL把数组头指针往后移动24个字节看,或者在VB中按地址传递数组中第一个元素

解决方案 »

  1.   

    谢谢!
    VC中的DLL把数组头指针往后移动24个字节是不实际的,因为DLL通常不仅仅给VB程序调用,而且试了一下好像也不行。至于在VB中按地址传递数组中第一个元素,我不知道具体如何操作,VB如何操作内存地址?
      

  2.   

    注意   在查看使用 C 语言语法的 DLL 过程文档时,请记住 C 以传值方式传递数组以外的参数。字符串参数是一个特例。如果以使用值方式传递字符串,那么传递的将是该字符串中第一个数据字节的地址;如果以使用引用方式传递字符串,那么实际传递的将是用来保存另一个地址的内存单元的地址;后面的“地址”实际是字符串的第一个数据字节的内存地址。通常,字符串应该使用 ByVal 方式传递到 APIs。Visual Basic 使用被称为 BSTR 的 String 数据类型,它是由自动化(以前被称为 OLE自动化)定义的数据类型。一个 BSTR 由头部和字符串组成,头部包含了字符串的长度信息,字符串中可以包含嵌入的 null 值。BSTR 是以指针的形式进行传递的,因而 DLL 过程能够修改字符串。(指针是一个变量,包含另外一个变量的内存地址,而不是数据。) BSTR 是 Unicode 的,即每个字符需要两个字节。BSTR 通常以两字节的 null 字符结束。按地址传递参数使过程用变量的内存地址去访问实际变量的内容。结果,将变量传递给过程时,通过过程可永远改变变量值。按地址传递参数在 Visual Basic 中是缺省的。
      

  3.   

    声明Dll函数为:
    Public Declare Function MyFun Lib "test.dll" Alias "_MyFun@4" (byref b As Long) As Long调用时传递第一个参数:
    MyFun(b(0))
      

  4.   

    感谢两位!按SnHnBn所述,搞定了!
    交个朋友,我的QQ  7050107
    http://www.yaguo.com/~lvstone