关于c++:记录平时遇到的一些注意点

WM_COPYDATA留神点

typedef struct tagCOPYDATASTRUCT {
  ULONG_PTR dwData;
  DWORD     cbData;
  PVOID     lpData;
} COPYDATASTRUCT, *PCOPYDATASTRUCT;

/********
正文:
1、dwData.为自定义数据;
2、cbData.即lpData指向的数据的长度,要是这个变量的值设置谬误,就会导致WM_COPYDATA传输/*数据失败;
3、lpData.传输的数据.最好应用根底数据类型;
********/

应用WM_COPYDATA时要用SendMessage而不能应用PostMessage,因为SendMessage是阻塞的,会期待音讯响应窗体解决音讯结束后再返回;而PostMessage是异步的,这样就可能会导致当音讯响应窗体接管到WM_COPYDATA的时候,COPYDATASTRUCT对象曾经被析构了,导致拜访数据产生异样;

因为应用SendMessage,所以不应该在WM_COPYDATA中解决数据,能够在音讯响应窗体的WM_COPYDATA中先把COPYDATASTRUCT对象中的数据复制进去,通过自定义音讯发送到音讯响应窗体,而后立刻返回,来缩小父过程的阻塞工夫。这样就把解决数据的代

 case WM_COPYDATA:
    {
      COPYDATASTRUCT* data = (COPYDATASTRUCT*)lParam;
      // TODO: 解决pCopyData->lpData指向的数据
    }
    break;

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理