C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[24654] Re:[질문]메세지 핸들러에서..
임문환 [mhlim] 1358 읽음    2003-03-07 22:36
님이 뭔가 잘못 알고 계신듯합니다.
님이 정의한 COPYDATASTRUCT cds;에 쓰레기 정보가 들어 있는 것이 당연합니다.

WM_COPYDATA 메시지가 발생하면
메시지 핸들러가 호출되고 그 매개변수(여기서는 msg)를 통해 정보들이 넘어옵니다.

WM_COPYDATA 
wParam = (WPARAM) (HWND) hwnd;            // handle of sending window
lParam = (LPARAM) (PCOPYDATASTRUCT) pcds; // pointer to structure with data

따라서, OnCopyData 메서드 내에서는 아래와 같이 해야 합니다.
COPYDATASTRUCT *cds = (PCOPYDATASTRUCT)msg.LParam;
if(cds->cbData == sizeof(MsgCmd))

그리고,
컴파일시 지정한 데이터의 바이트 얼라인먼트에 따라 구조체의 크기는 변할 수 있습니다.
즉, API 컴파일 시 적용된 것과 님의 프로그램 컴파일 시 지정한 것이 다른 경우 구조체의 크기가 서로 다를 수 있습니다.

그런데, 지금의 COPYDATASTRUCT 구조체의 구성원을 보면 아래와 같은데 이는 모두 4바이트짜리입니다.
따라서, 한쪽은 Quad Word이고 다른 한쪽은 그 게 아닌 경우만 아니라면 이 문제는 발생하지 않습니다.
    DWORD dwData;
    DWORD cbData;
    PVOID lpData;


괴로운 님이 쓰신 글 :
: 메세지를 다음과 같이 선언했습니다.
: MESSAGE_HANDLER(WM_COPYDATA,TMessage,OnCopyData);
:
: 다음은 함수입니다..
: void __fastcall OnCopyData(TMessage& msg);
:
: 구현부분에서는
: typedef struct
: {
:     char text[30];
: }MsgCmd;
:
: void __fastcall TFormMain::OnCopyData(TMessage& msg)
: {
:   COPYDATASTRUCT cds;
:   if(cds.cbData == sizeof(MsgCmd))  //여기에 크기가 다른 값이 옵니다.
:   {
:     MsgCmd msg1;
:     memcpy(&msg1,&cds.lpData,sizeof(MsgCmd));
:     ShowMessage((AnsiString)msg1.text);
:   }
:   delete cds;
: }
:
: 와 같이 했는데여..
: 보내는 부분에서는 잘 갑니다..그런데..
: 받는 곳에서는 위부분의
: cds.cbData == sizeof(MsgCmd)의 사이즈가 틀립니다.
:
: 보내는 부분은 VC++로 만들었습니다.
: void CVC_CommDlg::senddata()
: {
: MsgCmd msg;
: m_strSend = (LPCSTR)"Send....";
: strcpy(msg.text,m_strSend);
: cds.lpData = &msg;
: cds.cbData = sizeof(msg);
: cds.dwData = 0;
: ::SendMessage(hWnd,WM_COPYDATA,(WPARAM)m_hWnd,(LPARAM)&cds);
: }
:
:
: 왜 받는 부분에서는 cds에 쓰레기값이 들어갈까여?..
: 아시는 분 답변부탁드립니다..
:
:

+ -

관련 글 리스트
24649 [질문]메세지 핸들러에서.. 괴로운 744 2003/03/07
24654     Re:[질문]메세지 핸들러에서.. 임문환 1358 2003/03/07
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.