动态数组Redim 传参数的问题

springkid 2007-06-12 02:27:03
Private sendbuff() As Byte   '
private sub senddata()
 Do While j < singlenum 
GetNum=.......
ReDim sendbuff(12 + GetNum) '第一次循环通过,第二次出错"This array is fixed or temporarily locked"

sendbuff(0)=170
sendbuff(1)=170
;
;
If Not sendsucc(sendbuff, lenbuff) Then
is_sendbool = False
MsgBox ("通信错误过多,停止发送!")
closehandle(hcomm)
Exit Do
End If
end sub

Private Function sendbuff(buff() As Byte, sLen As Long) As Boolean

Dim answer As Long
Dim ret As Long
ret = WriteFile(hComm, buff(1), sLen, answer, 0) 'hComm 打开Comm1
Sleep 10
sendbuff= ret

End Function

'打开串口
hComm = CreateFile("COM1", GENERIC_READ Or GENERIC_WRITE, 0, ByVal 0&, OPEN_EXISTING, FILE_FLAG_POSIX_SEMANTICS, 0)


...全文
299 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
BuilderEm 2007-06-13
  • 打赏
  • 举报
回复
动态数组当做参数;调用后不可重新Redim.
clear_zero 2007-06-12
  • 打赏
  • 举报
回复
检查的方法,如果你怀疑参数问题的话就不要作为参数传出。把那个函数写入主函数看看
springkid 2007-06-12
  • 打赏
  • 举报
回复
单步调试错误出现在:
ReDim sendbuff(12 + GetNum)
'第一次循环通过,第二次出错"This array is fixed or temporarily locked"
If Not sendsucc(sendbuff, lenbuff) Then
is_sendbool = False
MsgBox ("通信错误过多,停止发送!")
closehandle(hcomm)
Exit Do
End If
我在这个后面还 sleep 60
加上doevents 也不行 我觉得应该是temporarily locked
数组在以参数传出后被locked 但我又不知道怎么做
因为 ret = WriteFile(hComm, buff(1), sLen, answer, 0) 'hComm 打开Comm1
Sleep 10
sendbuff= ret 返回值是true
ZOU_SEAFARER 2007-06-12
  • 打赏
  • 举报
回复
我想你需要延迟一会,就是你发送太快了,该内存正在被使用,你试图重定义内存快大小
你单步调式,看还是这个错误不??
If Not sendsucc(sendbuff, lenbuff) Then
is_sendbool = False
MsgBox ("通信错误过多,停止发送!")
closehandle(hcomm)
Exit Do
End If
doevents
springkid 2007-06-12
  • 打赏
  • 举报
回复
Private Function sendbuff(buff() As Byte, sLen As Long) As Boolean
函数名字应为:sendsucc
Private Function sendsucc(buff() As Byte, sLen As Long) As Boolean

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧