7,763
社区成员
发帖
与我相关
我的任务
分享
USHORT GetInfo(
char *Manufacturer,
char *Producer,
char *SerialNumber,
char *BufLength);
而*代表指针,char 代表是字符串类型,ushort表示整数数据类型,所以如果要改乘VB,应该改成这样
Public Declare Fuction GetInfo Lib "RationalScaleScale.dll"(ByVal Manufacturer As Long, ByVal Producer As Long, ByVal SerialNumber As Long, ByVal BufLength As Long)As Long'其实根据原来的声明,ushort应该转成VB的Integer,但是习惯上都用Long,范围更大,肯定不会出问题
在调用的时候这样:
Dim Manufacturer As String, _
Producer As String, _
SerialNumber As String, _
BufLength As String'这里声明字符串类型的变量
Manufacturer =xxx'需要的值
Producer =xxx'需要的值
SerialNumber =xxx'需要的值
BufLength =xxx'需要的值
GetInfo StrPtr(Manufacturer),StrPtr(Producer),StrPtr(SerialNumber),StrPtr(BufLength)
StrPtr函数取回一个字符串变量的地址
你试一下这样行不行吧。如果可以别忘了回来通知我一下,因为语法转换我也可能要做,但是没机会实践一下自己的想法。
附录1:之所以要这样做,是因为指针实际上取得是变量的地址,如果在C/C++里,可以通过地址直接操作对象,数据;但是在VB里没有指针这个概念,也不能直接通过地址操作对象。这里的函数要求传入的是指针,实际上就是一个地址,通过用StrPtr函数降地址传进去应该是可以的。这相当于VB读取指针。
附录2:这个虽然和你的问题无关,不过你可能会用到,这是我见到实际可行的。如果函数返回的也是一个指针,按理来说VB是没办法使用的,但是实际上却可以。只要你知道这个指针的指向到底是一个什么东西,就有办法调用。例如:
Dim SysTray As cSysTray ' 系统托盘类变量
Dim ClassAddr As Long ' 长整形类对象指针
' 取回长指针类对象,这被保存在用户数据的窗口结构。然后用户控制被子类。
ClassAddr = GetWindowLong(hwnd, GWL_USERDATA) ' 取回区指标对象
CopyMemory SysTray, ClassAddr, 4 ' 复制一个有被引用指针的对象到变量
SysTray.SendEvent lParam, wParam ' 发送窗口消息\用户事件控制
首先SysTray是一个cSysTray对象,但是他没有实例化(就是用Set SysTray = New cSysTray来创建一个新的对象),而GetWindowLong在这里返回的ClassAddr就是一个cSysTray对象的地址(指针)。这时候就可以用CopyMemory函数,将ClassAddr地址指向的所有内容原封不动地放到SysTray变量里,这时候的SysTray变量就有了ClassAddr地址所指向的cSysTray对象,所以下面的一条语句就可以用SysTray变量名来操作ClassAddr地址所指向的对象。这也就相当于是VB操作指针。