|
영악한녀석 님이 쓰신 글 :
: 안녕하세요.
:
: TComponent를 상속받아 UDP 컴퍼넌트를 하나 만들려고 합니다.
: 문제는 WSAAsyncSelect()를 사용하려면 핸들값이 필요한데, 찾아보니 AllocateHWnd()라는 함수를 통해서 얻어올 수 있던데.. 잘 안되서 여쭤봅니다.
:
: class PACKAGE MyUDP : public TComponent
: {
: //통신관련 된 변수들과 속성 및 이벤트들을 선언해놨습니다.
: private :
: HANDLE hWnd;
: void __fastcall WndProc(Messages::TMessage &Message);
: };
:
: 클래스는 저렇게 만들어 놓고 생성자에서 AllocateHWnd()를 호출해서 핸들값은 얻어오는데 문제는 없습니다.
:
: __fastcall MyUDP::MyUDP(TComponent *Owner)
: {
: hWnd = AllocateHWnd(WndProc);
: ...생략
: }
:
: 저런 일련의 과정들을 마치고 WSAAsyncSelect()를 호출했습니다.
:
: int ret = WSAAsyncSelect(socket, hWnd, WM_USER + 123, FD_READ);
:
: 물론 이 구문도 아무런 문제가 발생하지 않았습니다. 리턴값 받아서 확인했는데 정상이더라구요..
: 근데 막상 TNMUDP에서 데이터 전송해보면 WndProc()에 진입을 하지 않습니다.
:
: 제가 혹시 중요한 무언가를 빠뜨린게 아닌가 해서 선배님들께 조언을 구합니다. 도움좀 부탁드리겠습니다. ㅠㅠ
: 현재 사용하고 있는 환경은 윈도우7에 C++ Builder 6.0 사용하고 있습니다.
이 게 답인지는 모르겠구요.
AllocateHWnd의 반환형은 HWND 형입니다.
HANDLE 형은 HWND 형과 같을 때도 있지만 경우에 따라 다를 때도 있습니다.
그리고, FD_READ는 송신이 아니라 수신할 때 발생하지 않나요?
|