2013-06-24 292 views
0

例如,我剛纔調用了GetMessage(或者我在CallWndMsg鉤子回調中)並獲得了lParam和wParam。發送Windows消息

可能會使用SendMessage或PostMessage將此消息重新發送到其他進程的窗口,只使用接收的lParam和wPAram而不進行深度應對。我的意思是,如果這些參數(通常包含用於compunded結構的指針)在重新發送期間仍然有效,或者我可以面對內存違規問題(或類似的問題)? 如果我可以這樣做,系統如何決定何時可以發佈和刪除lPAram和wPAram?

PS似乎我不能這樣做的WM_COPYDATA,因爲MSDN指出,所有傳遞的數據只有當消息處理程序工作/ /但其他消息。

+0

如果使用'SendMessage',它應該阻止它被調用的位置,所以'lParam'和'wParam'變量應該保持有效。 –

+0

感謝您的回覆。 會發生什麼,如果我將使用PostMessage或PostThreadMessage? – DotNetter

回答

2

您不應該將指針從進程A傳遞到進程B,在進程B中這樣的指針(地址)可能指向釋放一些其他結構使用的內存或內存。 WM_COPYDATA是在進程之間傳遞數據的一種方式,實際上你可以將每個消息打包成二進制數組,然後使用WM_COPYDATA將其發送給其他進程,並在第二個進程中解壓縮,然後發送給自己解壓縮的消息。

在進程之間傳遞lParam和wPAram的唯一安全方法是隻包含DWORD數據。