使用VB调用DLL时返回类型 LPSTR 出错

使用VB调用DLL时返回类型 LPSTR 出错 GetName(VOID);
声明Declare Function GetName Lib "test.dll" () As String 调用中Dim sName As String
sName = GetName() 时在返回单个字符没有问题, 返回是多个字符的话就会报错 ,这个是什么问题 比如 sName 返回 "张Chr(0)"正常 ,返回 "张三Chr(0)"就会报错
DLL文档里函数说明 LPSTR GetName(VOID);
成功返回姓名字符串,失败返回 NULL。

我的理解是返回的是一个指针,声明的时候不应该是string,而是long

然后用copymemory读取。对错与否须要楼主验证一下了。

Private Declare Function GetName Lib "test.dll" () As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As Any, ByVal Source As Any, ByVal Length As Long)
'这里copymemory前两个参数是byval
Dim h As Long, st As String * 512
CopyMemory st, GetName, 512
MsgBox (Trim$(st))

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-04-06
估计是由于两者的编码格式不同造成的,VB用的是Unicode,而DLL用的是ANSI。你可以试着用字节数组来接收DLL的返回值,然后再转换为Unicode格式的字符串,比如:
Dim sName As String, b() As Byte
b = GetName()
sName = StrConv(b, vbUnicode)追问

这样的写法 提示

编译错误   不能给数组赋值

本回答被网友采纳
相似回答