2011-03-08 5 views
1

다른 프로그램으로 데이터를 전달하는 사용자 지정 Windows 메시지를 만들려면 어떻게해야합니까?mfc에서 사용자 지정 wm_copydata를 만드는 방법 C++

GUI 프로그램과 서버 프로그램 사이의 메시징입니다. 내 배경은 * nix 프로그래밍에 있고 나는 창 세계에서 조금 잃어버린 것이다.

현재 두 프로그램 모두 Visual Studio 마법사에서 "MFC 창 응용 프로그램"을 선택하여 만듭니다. 이제는 프로그램 간 의사 소통을위한 우아한 방법이 필요합니다. Google은 나에게 Cwnd-> sendmessage + 자신의 메시지 등을 등록합니다. 그러나 표준 사용자 정의 메시지를 사용하여 다른 프로그램에 char 포인터를 전달할 수는 없습니다 (음, 메모리 영역이 잘못되어 프로그램 segfaults). 그래서, 구글 다시 날 마샬링 sendmessage (WM_COPYDATA, hparam, lparam) 준다. 검색을 마샬링 할 때 ... 나는 벽을 만났다.

마샬링 된 메시지 (또는 해당 데이터)가 송신자와 수신자 프로그램에서만 읽을 수있는 공유 메모리 영역으로 전달된다고 가정합니다 (올바른?). 정렬 화 된 데이터의 포인터가 lparam 인 사용자 지정 메시지를 작성하여 다른 프로그램에 객체를 전달할 수 있습니다 (올바른?). 실제로 이것을 어떻게합니까? 나는 다음을 시도했다 :

pWin->SendMessage(pTargetWin, WM_CUSTOM_MESSAGE, pSourceWin, pData); 

위의 경우 pData가 정수이면 작동한다. pData가 객체에 대한 포인터 인 경우, marhsalling이 없기 때문에 객체를 사용할 수 없습니다. 나는 pData 래퍼 COPYDATASTRUCT 래퍼 할 수 및 WM_COPYDATA 변경할 알 수 있습니다. 그 대신에해야합니까?

BR, 주하

답변

1

WM_COPYDATA는 당신을 위해 마샬링하면 정확하게 당신이 LPARAM (lpData는 dwData 포인터 아니다)로 전달하고있는 COPYDATASTRUCT를 초기화 한 제공 않습니다. 커스텀 메시지는 그렇게하지 않을 것이고, 직접 마샬링을 재 구현하고 싶지는 않을 것이다. 마샬링이 필요하면 WM_COPYDATA를 사용하십시오. 네가 묻고있는거야? 이미 답을 알고있는 것 같습니다.

여러 가지 다른 종류의 메시지를 지원해야하는 경우 COPYDATASTRUCT.dwData에 열거 형을 채워 나머지 데이터의 의미를 지정할 수 있습니다. 4 바이트가 충분하지 않으면 마샬링 된 데이터에 헤더를 정의 할 수 있습니다.

0과 1의 큰 파일을 전달할 수있는 한 원하는대로 모든 것을 전달할 수 있습니다.

+0

음, 원하는 것은 손으로 마샬링하는 것입니다 ... 다른 옵션은 말한대로 WM_COPYDATA를 사용하는 것입니다. 내가 알고 싶은 또 다른 것은 마샬링 된 데이터 (WM_COPYDATA의 경우)의 가시성입니다. 모든 프로그램 또는 두 프로그램에서만 볼 수 있습니까? – Juha

+0

왜 손으로 마샬링을하고 싶습니까? 가시성에 대해서는 AFAIK에 대한 보안이 없습니다. Spy ++는 다른 사람의 메시지 루프를 연결하여 그곳에있는 메시지를 볼 수 있습니다. 글쎄 ... 사실 그것은 같은 사용자에 속하는 두 개의 프로세스를위한 것입니다. 나는 다른 사용자 계정에 속하는 메시지 대기열을 볼 수 있을지 의심 스럽다. 그러나 이전 버전은 크로스 사이트 스크립팅과 유사한 것으로 충분할 것입니다. –

+0

이것은 내가 작업하고있는 대형 멀티 플랫폼, 다중 경로 소프트웨어의 마지막 코드 부분입니다. 나는 윈도우 프로그래밍에 익숙하지 않고 단지 모순을 탐구했다. "모든 종류의 wm_message를 생성 할 수있다. <-> wm_copydata를 사용해야한다." 어쨌든 올바른 방법은 wm_copydata를 사용하여 copydatastruct에있는 내용을 포장하는 것입니다. 내가 감싸는 것은 커맨드 패턴 객체이다. 참조 : http://stackoverflow.com/questions/5237639/command-pattern-serialization-in-c 귀하의 도움에 감사드립니다. – Juha

관련 문제