2013-06-24 3 views
0

예를 들어, GetMessage (또는 CallWndMsg 훅 콜백 내에 있음)를 호출하고 lParam 및 wParam을 얻었습니다.앞으로 윈도우 보내기 메시지

SendMessage 또는 PostMessage를 사용하여 수신 된 lParam 및 wPAram을 사용하여 다른 프로세스의 창에이 메시지를 다시 보낼 수 있습니다. 나는이 매개 변수 (종종 compunded 구조체에 대한 포인터를 포함한다)가이 재송신 동안 유효하거나 메모리 위반 문제 (또는 이와 유사한 것)가있을 수 있다는 것을 의미합니까? lPAram과 wPAram을 출시하고 삭제할 수있을 때 시스템이 어떻게 결정 되었습니까?

PS 메시지 처리기가 작동하는 동안에 만 전달 된 모든 데이터가 살아 있음을 msdn이 가리 키기 때문에 WM_COPYDATA에 대해 그럴 수 없습니다.하지만 다른 메시지는 무엇입니까?

+0

'SendMessage'를 사용하면 호출 된 곳을 차단해야하므로'lParam' 및'wParam' 변수가 유효해야합니다. –

+0

감사합니다. 그리고 PostMessage 또는 PostThreadMessage를 사용할 경우 어떻게됩니까? – DotNetter

답변

2

프로세스 A에서 프로세스 B 로의 포인터를 전달하면 안됩니다. 프로세스 B에서는 포인터 (주소)가 다른 구조에서 사용하는 해제 된 메모리 또는 메모리를 가리킬 수 있습니다. WM_COPYDATA는 프로세스간에 데이터를 전달하는 방법 중 하나입니다. 실제로 각 메시지를 이진 배열로 압축하고 WM_COPYDATA를 사용하여 다른 프로세스로 보내고이 두 번째 프로세스에서 압축을 풀고 압축을 푼 메시지를 자신에게 보냅니다.

프로세스간에 lParam 및 wPAram을 전달하는 유일한 방법은 DWORD 데이터 만 포함하는 경우입니다.