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

38次阅读

共计 642 个字符,预计需要花费 2 分钟才能阅读完成。

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;

正文完
 0