2016-08-03 25 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