2016-08-03 80 views
2

我想从一个应用程序发送数据到另一个使用WM_COPYDATA。这两个应用程序都是控制台,没有窗口。我可以发送用户消息就好了。当我尝试发送WM_COPYDATA,并设置数据结构或不,我得到错误1159,基本上说我必须发送使用同步消息调用...但尚无SendThreadMessage。WM_COPYDATA,PostThreadMessage和错误1159

看来这是api或文档中的疏忽?似乎没有办法使用WM_COPYDATA只使用没有窗口的线程?

+0

请显示您的发送和接收代码,包括消息循环。 – Ari0nhh

+0

'WM_COPYDATA'需要一个窗口,因为它不能异步发送。 –

+0

进程间通信的另一种常见手段是[管道](https://msdn.microsoft.com/en-us/library/windows/desktop/aa365780.aspx)(或[命名管道](https:// msdn .microsoft.com/EN-US /库/窗/台式机/ aa365590.aspx))。这可能更适合您的场景。 – IInspectable

回答

4

WM_COPYDATA只能发送,不能发布。由于负载在进程之间编组,所以创建临时数据结构来支持编组。消息处理完成后,它们需要被销毁。这意味着消息必须同步传递。

所有这一切意味着您不能使用PostThreadMessage。相反,您需要创建一个窗口充当此类消息的接收者。请注意,此窗口可能是message-only window,并且不需要可见。

+0

那么,我可以使用PostThreadMessage来传输数据。似乎是最简单的方法。我不需要表演,只需转移。 – AbstractDissonance