从客户端传送的消息stMsg中,含有string类型成员,以及其他成员.服务器接收到这个消息后,消息的各个成员都能正确接收,但就是string类型接收得有问题.
当长度是15字节以下时,能正确接收;16字以上则所有字节的内容都是"CX0030错误,无法计算表达式的值",但却能知道string具体有多少个字节.请问为什么会这样?  怎样解决? 

解决方案 »

  1.   

    类对象通常只能在本进程中使用,不能直接传送出去,如果要传送string对象,应该将字符串内容取出来传送。
      

  2.   

    这就是我传送的对象的结构struct stMsg_data_ask : public stMsg
    {
    int index;
    int query_no;
    std::string   test;
    static int s_no;
    static int s_msg_type;
    stMsg_data_ask():stMsg(s_msg_type){}
    };
    这是客户端发送的部分         //create a query msg
    stMsg_data_ask msg;
    msg.index = index;
    msg.query_no = index;
    msg.test = "abcdefghijklmnopqrstuvwxyz";
    //save query msg and func
    add_data_query_msg(msg);
    frame->sendmessage(&msg,sizeof(msg));然后这是服务器端的接收部分class cMsgHandle_data_ask : public cMsgHandle
    {
    public:
    msghandleResult handle(const stMsgBind& bind) {
    stMsg_data_ask* p = (stMsg_data_ask*)bind.pMsg;
            }
    }就是从这个p看接收是否正确的
      

  3.   

    因为string对象当字符串长度小于16时,字符串内容是保存在对象里面,当字符串长度大于等于16时,才动态分配内存来储存内容。