델파이에서 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 에 해당하는 것을 델파이에서는 어떻게 정의해야 하는지, 또 어디에 코딩해야하는지 궁금합니다.
가르쳐주시면 감사하겠습니다.
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)