我的程序是这样的:LRESULT CCmd::OnArrived(WPARAM wParam, LPARAM lParam)
{
      struct downall *mystr = (downall *)lparam;
      PostMessage(MY_MSG,0,(LPARAM)(pHyperLinkInfo));
      ReplyMessage(TRUE); // 立刻返回信息给上层
}大家知道, PostMessage(MY_MSG,0,(LPARAM)(pHyperLinkInfo)),只是投递一个消息,不等这个消息响应完毕,就返回,这样我的 pHyperLinkInfo指针参数很可能在相应的消息处理 MY_MSG 处理之前就已经被清除了,如何避免我的参数 pHyperLinkInfo 被清除???

解决方案 »

  1.   

    加个互斥变量mutex,waitforsingeobject
      

  2.   

    参数pHyperLinkInfo指向一个动态分配的空间,而不要是一个局部变量,这样即使退出函数,也不会回收这个空间了。
      

  3.   

    同意楼上的看法,在堆上分配空间,因为如果是在栈上分配的,函数一退出,就被释放了。或者用static 修饰符看看(没试过)。
      

  4.   

    用SendMessage()吧, 等事件处理完SendMessage才返回。
      

  5.   

    happyparrot(快乐鹦鹉) 
    ----------------------
    是否是这样?LRESULT CCmd::OnArrived(WPARAM wParam, LPARAM lParam)
    {
          struct downall *mystr = new struct downall;
          *mystr = (downall *)lparam;      PostMessage(MY_MSG,0,(LPARAM)(pHyperLinkInfo));
          ReplyMessage(TRUE); // 立刻返回信息给上层
    }
     Atomictry(天影)
    ------------------------
    不行,因为外部有实时时间限制,而对消息 MY_MSG 的处理过程是非常耗时的。
    用SendMessage 必须等待下面的消息处理完毕才能返回,那么外部发过来的消息就需要等待非常长的时间。
      

  6.   

    是否是这样?LRESULT CCmd::OnArrived(WPARAM wParam, LPARAM lParam)
    {
          struct downall *mystr = new struct downall;
          *mystr = (downall *)lparam;      PostMessage(MY_MSG,0,(LPARAM)(pHyperLinkInfo));
          ReplyMessage(TRUE); // 立刻返回信息给上层
    }
    ===============================
    不对。这是错误的。不仅没有效果,而且会出现内存泄漏。
    如果你的downall结构没有特殊对象的话,可以这样:LRESULT CCmd::OnArrived(WPARAM wParam, LPARAM lParam)
    {
          struct downall *mystr = new struct downall;
          downall *getstr= (downall *)lparam;
          memcpy(mystr,getstr,sizeof(downall));      PostMessage(MY_MSG,0,(LPARAM)(mystr));
          ReplyMessage(TRUE); // 立刻返回信息给上层
    }