关于VB调用VC编写的DLL的问题
VC编写的DLL中的函数这样定义:ReadSysInfo (char* lpSysInfo) ,函数返回类型是long,返回0表示成功参数说明:lpSysInfo是输出参数
我在VB中这样调用:
Declare Function ReadSysInfo Lib "nvict.dll" (Byval lpSysInfo As String) As Long
Private Sub Command4_Click()
Dim sysString As String
Dim i As Integer
i = ReadSysInfo(sysString)
If i = 0 Then
Text.text= sysString
Else
Text.text="读系统信息失败!"
End If
End Sub
执行时老是报错,如果我在i = ReadSysInfo(sysString)的前面加上sysString="123"分配一个空间,可以读出返回字符串的前几位,但是后面好像都是乱码一样的东西,后来发现lpSysInfo返回来的是一个字符串的首地址,不是完整的字符串,那么如果我想读取lpSysInfo的完整的字符串,我在VB中应该做怎样的处理那?
各位大侠给指点一下把,小弟感激不尽 --------------------编程问答-------------------- VB中按地址传递应该是ByRef吧 你试试 --------------------编程问答-------------------- 我用Byref试过了,不行,直接报Byref类型不符 --------------------编程问答-------------------- 你传个byte型的数组进去
Dim sysString() As Byte
Dim i As Integer
i = ReadSysInfo(sysString)
然后再从数组里面取
--------------------编程问答-------------------- sysString=string(256,0)
i = ReadSysInfo(sysString) --------------------编程问答-------------------- lpSysInfo=left$(lpSysInfo,instr(1,lpSysInfo,vbnullchar)-1) --------------------编程问答-------------------- 既然参数中没有指定字符串缓冲区长度,那么你们应该约定了一个长度。
用 4楼+5楼 的方法。 --------------------编程问答-------------------- 怀疑 API声明 和 调用方法 都不正确。
--------------------编程问答-------------------- 4楼正解。
明显是没正确分配缓冲区,对指针一定要先分空间。
dim s as string 这样分配的空间在你的c代码所使用的长度 超过它的正常长度了。 --------------------编程问答-------------------- ReadSysInfo (char* lpSysInfo)
怎么定义Byval lpSysInfo As String
补充:VB , 基础类