首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

VB调用C++函数,该怎么解决

2013-01-05 
VB调用C++函数C++的具体原型不记得了,在C#中调用如下[DllImport(TagDll.Dll)]public static extern byte

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

请问在VB中怎么调用啊?谢谢
[解决办法]

是通过 DLL 库?
[解决办法]
Declare Function Inventory Lib "TagDll.Dll" (pUID As Varaint, ByVal DataLen As Byte) As Byte


[解决办法]
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开始
[解决办法]
这样声明:
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)
[解决办法]
那有应该是你的 C++ 原型没搞对,你应该把原型放出来。
在VB中声明API函数,掌握几个要点就可以了:
声明 API 函数的函数名(包括大小写)一定要正确
遇到指针类型可以用 Long 类型或 any 类型声明
其他的对应变量体积就可以了
还有就是注意函数是否有返回,如果原型是 void ,在 VB 里就用 Sub
如果原型里有返回类型,VB 里就用 Function 并设置返回类型

至于指针的 Long 和 Any 的使用其实可以理解为地址。
如果用 Long 类型作为指针类型,处理时需要借助API函数操作内存句柄,
而用 Any 类型就可以直接在VB中分配内存区域,并传递内存区域的首地址
给 API 函数,使用时可直接操作VB里定义的变量,不需要借助API来移动
复制内存地址中的内容。

如果上面的声明有问题,你应该检查你的 DLL 是不是在有效的系统位置,
然后看看你的 API 函数名是否声明正确,最后再看看参数是否齐全。
[解决办法]
在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))”这部分写在你要调用的地方。

热点排行