遇到一个UDP发报文的问题,小弟初学请高手指点。
基本思想是我定义了一个相对复杂的结构 打算把用UDP发出去,网上找到了部分示例代码但是总是报错,以下是我写的代码还请大家帮忙看看。
Public Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCop)   'add by NL 07-12-07
Public Declare Function VarPtr Lib "MSVBVM60" (var As Any) As Long

Public Type OperateItem             
  NodeNum As Integer    
  state As Integer   
  CheckFlag As Integer   
  ContentLength As Integer   
  Content As String   
End TypePublic Type CZPForm
  PacketType As Integer    
  length As Integer   
  OperatieItemNum As Integer   
  SingleOperateItem() As OperateItem   
End TypePublic SingleOperation As OperateItem
Public SendData As CZPForm
'以上是我定义的结构,SendData 是要发送的数据

  Dim bytes()     As Byte
  'Dim data As varient
  ReDim bytes(SendData.length * 2) As Byte
  CopyMemory bytes(0), ByVal VarPtr(SendData), LenB(SendData)
  WskUDP.SendData bytes  
省略了其他的部分,就把关键的东西发上来了,出错报告Bad DLL calling convertion

解决方案 »

  1.   

    Public   Type   CZPForm 
        PacketType   As   Integer         
        length   As   Integer       
        OperatieItemNum   As   Integer       
        SingleOperateItem()   As   OperateItem       
    End   Type 这里的SingleOperateItem()   As   OperateItem       最好是有固定维数
      

  2.   

    谢谢上面的 但是在使用这个自定义结构的时候 我有声明过 原帖里面没写出来 ReDim SendData.SingleOperateItem(j - 1)’j为项数
      

  3.   

    我的程序运行到 ComyMemory 都是没问题的SendData的赋值也没有问题 跟踪能看到里面的数和字符都是正确的 就在ComyMemory 这一步报错了
      

  4.   

    我一般都是用写文件的方式。     Dim lngL As Long, bytFile() As Byte
        Dim doc As String
        Dim strSrcFile As String
        Dim fn As Long
        
        doc="................"    strSrcFile = TemporaryFile()  ' 得到临时文件名
        fn = FreeFile
        Open strSrcFile For Binary Access Read Write As fn
        Put fn, , doc
        Close fn
        
        Open strSrcFile For Binary Access Read Write Shared As #1
        lngL = LOF(1)
        ReDim bytFile(lngL - 1)
        Get #1, , bytFile
        Close #1    WskUDP.SendData  bytFile
      

  5.   

    补充一点,TemporaryFile() 是我自定义的一个生成临时文件名的函数。
    这个你自己改成个文件路径就可以了。
      

  6.   

    LenB(SendData) 函数返回的好像不是数据占用的字节数
    它会把中英文每个字符都当成两个字节