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

vb 通信发送端是结构体 在接收端解析后(内存拷贝)仍然转为结构体

Option Explicit
Type 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 ,  网络编程
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,