글
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;
{
#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
#endif
#ifndef UNICODE
return init_addr(cp);
#endif
return init_addr(cp);
#endif
}
본인의 프로그램 역시 network 라이브러리 부분에 위 함수를 추가하여 사용하고 있다.
* Ref
* Ref
'Skills > Programming' 카테고리의 다른 글
serial communication에서 inturrupt를 사용하는 이유 (0) | 2016.02.15 |
---|---|
[안드로이드] 디바이스를 못찾을 때.. (0) | 2016.02.06 |
[OpenGL] 3D coordinates from 2D mouse click ( Convert Screen Coordinate to World Coordinate ) (0) | 2015.06.22 |
KB954430 자꾸만 다시 설치하라고 할 때.. (0) | 2015.06.08 |
MATLAB에서 Figure docking (default) (1) | 2015.05.21 |