|
영악한녀석 님이 쓰신 글 :
: HWND 타입으로 바꿔서도 해봤는데.. 다른점은 없네요 ㅠㅠ
:
:
: ㅁ 님이 쓰신 글 :
: : 영악한녀석 님이 쓰신 글 :
: : : 안녕하세요.
: : :
: : : 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는 송신이 아니라 수신할 때 발생하지 않나요?
아래처럼도 해 보셨는지요?
int ret = WSAAsyncSelect(socket, hWnd, WM_USER + 123, FD_READ|FD_WRITE);
|