C++的具体原型不记得了,在C#中调用如下
[DllImport("TagDll.Dll")]
public static extern byte Inventory(byte[] pUID, byte len); 请问在VB中怎么调用啊?谢谢

解决方案 »

  1.   

    是的,就是像调用win32 API一样,主要是参数不知怎么写,字节数组
      

  2.   

    木有原型,只能猜猜看:Declare Function Inventory Lib "TagDll.Dll" (ByRef pUID As Byte, ByVal DataLen As Byte) As ByteDim pUID(254) As Byte, bytLength As Byte, ret As Byte
    ......
    ret = Inventory(pUID(0), bytLength)
      

  3.   

    C++原型第一个参数是byte*的,怎么写?上面的方法提示与约定的不匹配
      

  4.   

    Declare Function Inventory Lib "TagDll.Dll" (pUID As Varaint, ByVal DataLen As Byte) As Byte
      

  5.   

    public declare Function Inventory LIB "TagDll.Dll" (byref pUID as byte, byval len as byte) as byte调用:
    ret=Inventory(Arr(0),ubound(arr)+1)'数组下标从0开始
      

  6.   

    Private Declare Function Inventory Lib "TagDll" (ByRef pUID As Byte, ByVal length As Byte) As ByteDim pUID(8) As Byte
    Dim num As Byte
    num = Inventory(pUID(0), UBound(arr) + 1)提示类型不匹配,请问如何解决,谢谢
      

  7.   

    这样声明:
    Declare Function Inventory Lib "TagDll.Dll" ( _
                                            pUID As Any, _
                                            ByVal DataLen As Byte _
                                            ) As Byte
    调用时大致是这样:
    Dim tmpArray() as Byte
    Dim rd As Byte
    Redim tmpArray(100)
    rd = Inventory(tmpArray(0),UBound(tmpArray)+1)
      

  8.   


    ret=Inventory(Arr(0),cbyte(ubound(arr)+1))'数组下标从0开始
      

  9.   

    那有应该是你的 C++ 原型没搞对,你应该把原型放出来。
    在VB中声明API函数,掌握几个要点就可以了:
    声明 API 函数的函数名(包括大小写)一定要正确
    遇到指针类型可以用 Long 类型或 any 类型声明
    其他的对应变量体积就可以了
    还有就是注意函数是否有返回,如果原型是 void ,在 VB 里就用 Sub
    如果原型里有返回类型,VB 里就用 Function 并设置返回类型至于指针的 Long 和 Any 的使用其实可以理解为地址。
    如果用 Long 类型作为指针类型,处理时需要借助API函数操作内存句柄,
    而用 Any 类型就可以直接在VB中分配内存区域,并传递内存区域的首地址
    给 API 函数,使用时可直接操作VB里定义的变量,不需要借助API来移动
    复制内存地址中的内容。如果上面的声明有问题,你应该检查你的 DLL 是不是在有效的系统位置,
    然后看看你的 API 函数名是否声明正确,最后再看看参数是否齐全。
      

  10.   

    找了几天终于找到原型了
    byte Inventory(byte* pUID, byte len);请问在vb中如何调用,谢谢
      

  11.   


    引用 8 楼 worldy 的回复:
    public declare Function Inventory LIB "TagDll.Dll" (byref pUID as byte, byval len as byte) as byte调用:
    ret=Inventory(Arr(0),cbyte(ubound(arr)+1))'数组下标从0开始
      

  12.   

    你把指针用 byte 来传递?这肯定不行
    ======================================================
    如果这真的是 API 函数的原型,就按我 10# 的方法声明和调用就没错了。
    如果不行,有可能你的 DLL 不是API形式的DLL,或者你的原型搞错,不会再有其他的可能性。
      

  13.   

    在VB中函数声明要在模板中声明也就是说“public declare Function Inventory LIB "TagDll.Dll" (byref pUID as byte, byval len as byte) as byte”  这部分要写在模板中。“ret=Inventory(Arr(0),cbyte(ubound(arr)+1))”这部分写在你要调用的地方。