string的消息传送问题 从客户端传送的消息stMsg中,含有string类型成员,以及其他成员.服务器接收到这个消息后,消息的各个成员都能正确接收,但就是string类型接收得有问题.当长度是15字节以下时,能正确接收;16字以上则所有字节的内容都是"CX0030错误,无法计算表达式的值",但却能知道string具体有多少个字节.请问为什么会这样? 怎样解决? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 类对象通常只能在本进程中使用,不能直接传送出去,如果要传送string对象,应该将字符串内容取出来传送。 这就是我传送的对象的结构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看接收是否正确的 因为string对象当字符串长度小于16时,字符串内容是保存在对象里面,当字符串长度大于等于16时,才动态分配内存来储存内容。 如何获取客户区的绝对位置X,Y 如何在指定的picture控件显示从文件中打开的图像(在线等待,急!!!!) 关于“标准打开/保存对话框”还是不完美 想知道BBS或网站的服务器软件是怎样写的 弱弱地问,编译出来的DLL一般怎么使用? 使用ADO调用存储过程来返回记录集的问题 请问用OLE DB方式如何实现对数据库表记录的添加、删除以及查询功能?我想通过菜单控制,能否给出详细的源代码?谢谢! 为什么我的UDP 服务器只能接收一次?接收的数据显示在列表框中? 有关虚函数的问题。 如何获取计算机中设定的屏幕保护时间? 关于多线程!!!!!! 如何消除警告--数据类型转换问题
{
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看接收是否正确的