Q&A

  • C++에서의 #define을 델파이에서는 어떻게 ?
델파이에서 Win32Api 를 이용하여 1:N 소켓통신을 하려고 합니다.

                       // 서버 소켓 생성
                g_hServerSocket := socket( PF_INET, SOCK_STREAM, IPPROTO_TCP );

                // 로컬호스트 주소와 결합
                ZeroMemory( @ServerAddr, sizeof( ServerAddr ) );

                ServerAddr.sin_family := AF_INET;
                ServerAddr.sin_addr.s_addr := INADDR_ANY;
                ServerAddr.sin_port := htons( 30012 );

                bind( g_hServerSocket, ServerAddr, sizeof( ServerAddr ) );

                // 대기 모드로 진입
                listen( g_hServerSocket, SOMAXCONN );

                WSAAsyncSelect( g_hServerSocket, wnd, WM_SOCKEVENT, FD_ACCEPT );


서버에서는 서버소켓 생성-> 로컬호스트 주소와 결합 -> 대기 모드를 거쳐

WSAAsyncSelect 함수를 실행하려합니다.


            WSAAsyncSelect( g_hServerSocket, wnd, WM_SOCKEVENT, FD_ACCEPT );


이 함수의 세번째 인자는

네트워크 이벤트가 발생하면 윈도우에 전달될 사용자 정의 메시지라고 합니다.


#define  WM_SOCKEVENT         WM_USER+1;



C++에서는 이것의 작동을 위해서 메시지 크래커를 흔히 씁니다.

아래는 WM_SOCKEVENT 를 위한 메시지 크래커를 C++ 헤더에서 정의해놓은 코드입니다.


/* void Cls_OnSocketEvent(HWND hwnd, SOCKET socket, int nEvent, int nErrorCode) */
#define HANDLE_WM_SOCKETEVENT(hwnd, wParam, lParam, fn) \
    ((fn)((hwnd), (SOCKET)(wParam), LOWORD(lParam), HIWORD(lParam)), 0L)



여기서, 질문입니다.

위의 define 에 해당하는 것을 델파이에서는 어떻게 정의해야 하는지, 또 어디에 코딩해야하는지 궁금합니다.

가르쳐주시면 감사하겠습니다.
3  COMMENTS
  • Profile
    윤수아 2006.05.16 19:47
    델파이 도움말에 나와 있는 예제를 올려드립니다.


    For example,

    {$DEFINE CLX}

    const LibVersion = 2.1;

    {$IF Defined(CLX) and (LibVersion > 2.0) }
      ...  // this code executes
    {$ELSE}
      ...  // this code doesn't execute

    {$IFEND}

    {$IF Defined(CLX) }
      ...  // this code executes
    {$ELSEIF LibVersion > 2.0}
      ...  // this code doesn't execute
    {$ELSEIF LibVersion = 2.0}
      ...  // this code doesn't execute
    {$ELSE}
      ...  // this code doesn't execute
    {$IFEND}


    'Defined function ($IF directive)' 라는 색인이네요...(참고로 전 델6)
  • Profile
    라벤더 2006.05.16 18:30
    const
      WM_SOCKEVENT = WM_USER+1;

    이렇게 사용해 보세요 ^^
    위치는 변수와 동일한 곳에 쓰면 됩니다..


  • Profile
    델파이나라 2006.05.17 10:26