vb 通信发送端是结构体 在接收端解析后(内存拷贝)仍然转为结构体
Option ExplicitType sendpack
cpu_temperature As String
ups_state As String
x_laser_intensity As String
y_laser_intensity As String
x_temperature As String
End Type
Dim sp() As Byte, sendp As sendpack
Public Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" ( _
hpvDest As Any, hpvSource As Any, ByVal cbCop)
Public Sub cmsg_pack_send()
sendp.cpu_temperature = Form1.Text3.Text
sendp.ups_state = Form1.Text5.Text
sendp.x_laser_intensity = Form1.Text6.Text
sendp.y_laser_intensity = Form1.Text7.Text
sendp.x_temperature = Form1.Text8.Text
ReDim sp(LenB(sendp) - 1) As Byte
CopyMemory sp(0), sendp, LenB(sendp)
Form1.Winsock1.senddata sp
End Sub
然后程序运行时出错,如下提示
实时错误 49
dll 调用约定错误
错误行显示在 CopyMemory sp(0), sendp, LenB(sendp) 上
请各位大哥帮帮看看啥问题啊,谢谢了!
摆脱,没高手帮忙啊?
有谁有 有关通信时 传输 结构体 的程序 --------------------编程问答-------------------- 字符串类型其数据并没有保存在结构体内,结构体内保存的只是指向实际字符数据的指针,内存拷贝是不行的 --------------------编程问答--------------------
1 结构内的字符串改为定长,解决楼上所说的问题;
2 貌似你的 CopyMemory 声明不正确,因而出现你所说的错误:
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
--------------------编程问答-------------------- 请问vb结构体里是不可以传字符串类型的数据是吧,我在做通信的时候,需要传结构体,但是每次用copymemory时都得不到正确结果,很苦恼啊!! 麻烦指教下!! --------------------编程问答-------------------- 需要两个过程:
一,组包
二,解包
组包过程的功能是,把输入的结构变量转化为字节数组.而你这里想使用简单的一句内存复制就完成,是不行的.
除非如上面of123所说的,所有字符串变量声明为定长,不然就得自己一个一个元素处理.
解包过程,估计你也是想一句内存复制就完成.........封包的大小,CRC啥的都没有....不过算了,你还是声明为定长字符串变量吧!
补充:VB , 网络编程