MFC에서 소켓통신이 잘 안될 때.. [유니코드 멀티바이트]

Skills/Programming 2016. 1. 14. 18:35

기존에 VS2010에서 잘 실행되던 프로그램이 VS2013으로 migration을 한 후에 소켓 통신이 정상적으로 이루어지지 않는 현상이 발생했다.

결론부터 이야기하자면, 아래 속성의 그림에서 볼 수 있듯 vs2013부터 MFC에서는 유니코드를 쓰기를 원한다고(?)한다(이 부분은 확실치 않지만, 멀티바이트를 사용하기 위해서는 따로 추가 설치를 해야 한다.). 



결국 문제의 원인은 inet_addr() 함수가 char* 형 변수를 받아야 하는데, VS2013부터는 MFC에서 char* 형 변수가뜻대로 동작하지 않을 때가 많다. 

따라서 유니코드 프로그램을 작성하면 inet_addr()함수를 쓰기 귀찮아진다.

해결책 중에 하나는 inet_addr이 유니코드를 인자로 받도록 만드는 것이다. (아래의 소스 참조)

DWORD _tinet_addr(const TCHAR *cp)
{
    #ifdef UNICODE
    char IP[16];
    int Ret = 0;
    Ret = WideCharToMultiByte(CP_ACP, 0, cp, _tcslen(cp), IP, 15, NULL, NULL);
    IP[Ret] = 0;
return inet_addr(IP);
#endif
#ifndef UNICODE
return init_addr(cp);
#endif
}

본인의 프로그램 역시 network 라이브러리 부분에 위 함수를 추가하여 사용하고 있다.

* Ref



설정

트랙백

댓글