当前位置:编程学习 > VB >>

关于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 ,  基础类
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,