有个两个程序,一个是vb的,一个是vc的,要求他们之间传送数据,这个数据是个数据结构。 VC定义是这样的:
  #pragma  pack(1)typedef struct tagSmsMsgHeader{
INT msg_class;                
INT msg_code;                 
DWORD  seq_num;               
CHAR customer_phone[16];      
INT body_size;                
}SmsMsgHeader;typedef struct tagSMSMsg{
SmsMsgHeader header;
    CHAR smsMsg[128];                   
}SMSMsg;////////////////////////////////////////////////////////////////
VB是这样定义的
Public Type tagSmsMsgHeader
    msg_class As Long            
    msg_code As Long             
    sql_num As Long              
    customer_phone  As String * 16     
    body_size As Long           
End TypePublic Type tagSMSMsg  
    header As tagSmsMsgHeader
    SmsMsg As String * 128
End Type我把数据填好后,
问题是,VB的socket不能传送数据结构,所以我用copymemory到byte里面发送
CopyMemory SendByte(0), varptr(SmsMsg), length 
但是很郁闷,传过去数据,VC那边解出来不对。
同问,反过来从VC那边发过来,VB又该如何解呢?对VB不是很熟悉,请问如何怎么写要?

解决方案 »

  1.   

    vb的string和C的char[]好像不是一样的东西。
      

  2.   

    传什么都不是问题, 关键就看你用什么方法了, 简单的可以用剪贴板,DDE, TCPIP, 文件,数据库, 无非就是两个程序通讯
      

  3.   

    用的是 TCPIP,但是两边传输的数据,用数据结构解出来都不对
      

  4.   

    customer_phone As byte(15)这样改了,两边数据怎么对的上?
      

  5.   

    首先:
    Public Type tagSmsMsgHeader
      msg_class As Long   
      msg_code As Long   
      sql_num As Long   
      customer_phone(15) As byte
      body_size As Long   
    End TypePublic Type tagSMSMsg   
      header As tagSmsMsgHeader
      SmsMsg(127) As  byte
    End TypeCopyMemory SendByte(0), byval varptr(SmsMsg), length  然后用 strconv 来转换ASI 和 BStr 就可以。
    当然像你这种#pragma pack(1) ,最好用类型库。vb是可以用类型库,这样可以就不会发生内存对齐问题了。
    可以参考http://topic.csdn.net/u/20100305/10/2398150e-ae14-4456-93a8-6abeee6d2b96.html
    和http://topic.csdn.net/u/20090425/08/7bc8e6e6-e561-4ba8-aba2-7744de121f25.html?21241