VB 实时错误 '-2147417848' (80010108) :对象'senddata'的方法 'IMSHFlexGrid' 失败

lwj_1986 2009-08-17 02:48:54
模块 xywhThread

Public Declare Function CreateThread Lib "kernel32" (lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, ByVal lpParameter As Long, ByVal dwCreationFlags As Long, lpThreadId As Long) As Long
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Public xywhExitThread As Boolean
Dim url(20) As String, Temp, dd, j, cc(200), tou, wei
Sub test()
Static i_len As Integer
Dim INByte() As Byte
Dim Buf As String, a, n
Dim btLoCRC As Byte, btHiCRC As Byte
Dim Data As Integer
l = 0
url(0) = 20002
getd url(0) '这里调用另一模块的方法
Do While l = 0
Form1.Controls("Winsock" & 2).SendData bisend
te: Sleep 1300

i_len = Winsock2.BytesReceived
If i_len = 0 Then
GoTo te
Form1.Shape2.BackColor = &H8000000F
Form1.Command7.Caption = "开始监听"
'Exit Sub
End If
If i_len > 10 Then
Form1.Shape2.BackColor = &HFF00&
Form1.Command7.Caption = "停止监听"
End If
If Buf = a7 Then wmFF (16022)
If Len(Buf) > 25 Then
Form1.Winsock2.GetData INByte
If INByte(1) = 3 Then '读寄存器
'CRC校验
crc = CRC16(INByte, UBound(INByte) - LBound(INByte) - 1, btLoCRC, btHiCRC)
If INByte(UBound(INByte) - 1) = btLoCRC And INByte(UBound(INByte)) = btHiCRC Then
For i = 3 To UBound(INByte) - 2 Step 2
Data = "&h" + Hex(INByte(i)) + Hex(INByte(i + 1))
Buf = Buf + Str(Data) '转换为十进制显示
Next i
Form1.Text6.Text = Text6.Text & Buf
n = chrasc(Buf)
a = Left(n, 2)
Select Case a
Case "$$"
uid2 = Left(n, 6)
url(0) = 20202
GoTo re1
Case "Q0"
num2 = n
a7 = Buf
url(0) = 20202
GoTo re1
End Select
End If
re1: If uid2 <> "" And num2 <> "" Then
Exit Do
Form1.read (2)
Exit Sub
End If
End If
End If
Loop
End Sub


另一模块的getd方法
Public Function getd(sr As String)
Dim bisend() As Byte
Dim crc, X, Y
Dim btLoCRC As Byte, btHiCRC As Byte
Dim Data As Integer
ReDim bisend(7)
X = Left(sr, 4)
Y = Mid(sr, 5, Len(sr))
A1 = Hex(&H8000& + CLng(X))
A2 = Mid(A1, 1, 2)
A3 = Mid(A1, 3, 2)
bisend(0) = "&h" + Hex(2)
bisend(1) = "&h" + Hex(3)
bisend(2) = "&h" + A2
bisend(3) = "&h" + A3
bisend(4) = "&h" + Hex(0)
bisend(5) = "&h" + Hex(8)
crc = CRC16(bisend, 6, btLoCRC, btHiCRC)
bisend(6) = "&h" + Hex(btLoCRC)
bisend(7) = "&h" + Hex(btHiCRC)
Form1.Controls("Winsock" & Y).SendData bisend
End Function


在模块 xywhThread中调用
另一模块的getd(sr As String) 会在最后一句Form1.Controls("Winsock" & Y).SendData bisend
包错

请问是什么的原因呢? 如果在FORM1窗口中调用就是正常的
...全文
282 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lwj_1986 2009-08-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lwj_1986 的回复:]
引用 1 楼 slowgrace 的回复:
http://topic.csdn.net/u/20090526/10/ecb3a5bd-95b3-46f0-a7a7-aa9db9298c4b.html


我看过了 MSHFLEXGRID  这个控件  我没有用到过  而且提示的错误的方法都不一样
[/Quote]

设置没有问题 因为没涉及到控件的问题
vbman2003 2009-08-17
  • 打赏
  • 举报
回复
或者函数改为:

Public Function getd(sr As String)
'...............
dim frm as form
for each frm in forms
if frm.name="Form1" then exit for
next
frm.Controls("Winsock" & Y).SendData bisend
set frm=nothing
end function


vbman2003 2009-08-17
  • 打赏
  • 举报
回复

哦,你是在其它窗口调用getd?那么如果form1是出来的新实例,函数修改如上所述,调用方法:

dim frm as form
for each frm in forms
if frm.name="form1" then exit for
next
getd url(0),frm '这里调用另一模块的方法
set frm=nothing


这样写的函数不知道还有什么好的调用方法.....
vbman2003 2009-08-17
  • 打赏
  • 举报
回复
你form1是new出来的新实例吧?尝试改一下那个函数:

Public Function getd(sr As String, frm as object)
'...............
frm.Controls("Winsock" & Y).SendData bisend
end function

'在调用窗口,把当前窗口作为参数传进来
getd str,me
slowgrace 2009-08-17
  • 打赏
  • 举报
回复
我是说,你可能也是哪里没设置对。
lwj_1986 2009-08-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 slowgrace 的回复:]
http://topic.csdn.net/u/20090526/10/ecb3a5bd-95b3-46f0-a7a7-aa9db9298c4b.html
[/Quote]

我看过了 MSHFLEXGRID 这个控件 我没有用到过 而且提示的错误的方法都不一样

7,763

社区成员

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

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