C++프로그래밍/MFC

MBCS와 유니코드 (dll,lib 주의)

season97 2025. 3. 6. 14:02

MBCS (멀티바이트 Character Set)

char형

영문 한 글자는 1바이트, 한글 한 글자는 2바이트

버전이 낮은 VS환경의 기본 설정

엄청 구형이다.  2000년도 이후부던 다 Unicode를 사용했다;;;

 

Unicode 

ㆍ wchar_t형

ㆍ 영문, 한글 모두 한글자에 2바이트 사용

ㆍ 문자열 앞에 'L'을 붙여서 구분

ㆍ TEXT(), _T()매크로 사용

 

https://season97.tistory.com/65

 

문자와 문자열 (유니코드)

※ C / C++을 이미 알고 있으나 개인적인 공부 및 복습을 위해 포스팅 하는 글이므로C++에 대한 구체적인 정보를 담고 있지 않습니다.  ▶ 문자ㆍ  char : 알파벳 / 숫자 문자를 나타낸다 ㆍ  wchar_t

season97.tistory.com

옛날에 정리해둔 글이 있다.

 

※ 새로운 MFC 프로잭트를 만든다면 유니코드를 해야한다. 하지만 옛날부터 있던 프로젝트라면 갑자기 유니코드로 바꿀라 하면 높은 확률로 에러가 발생할 것이다.

 

보통 vs의 설정에 따른다

 

 

▶ 문자열 처리 때문에 헷갈리지 말자. 

ㆍ 메모리찍어서 확인해보면 딱 보인다. 영문1글자에 2바이트를 차지하고있다.

 

※ 근데사실 리틀엔디안이냐 빅엔디안이냐에 따라서 또 결과가 바뀐다..  빈공간이 앞에오냐 뒤에오냐

https://season97.tistory.com/55

 

문자와 엔디안

▶ 문자 처리ㆍ 결과는 .. ? ㆍ 뭐 이상한 값들이 들어가있다. 당연한 이야기지만 컴퓨터는 알파벳을 알 수 없다.ㆍ 따라서 어떠한 규약이 필요한데 가장 기본이되는 것이 아스키코드 ㆍ 위 표

season97.tistory.com

ㆍ 그리고 만약 출력을찍어보면 W만 나올것이다. 그도 그럴것이 w뒤에는 00 인 NULL 공간이 있기 때문이다

 

첫글자만 나오는 오류가 있다면?? 문자열 처리를 잘못 처리했다고 생각하자 

실무에선?

 

TCHAR 매크로를 이용하자. 프로젝트 속성의 유니코드, 멀티바이트에 맞게 문자열을 알아서 처리해준다

ㆍ TEXT매크로도 멀티바이트로 가면 알아서 사라진다.

 

 

★  MFC를 빌드하면 exe ,dll, lib중 하나가 될텐데 ...

1. 문자(언어) 문자집합이 맞아야한다. exe는 유니코드인데 dll이 멀티바이트다? 안됨.

ㆍ dll을 갖다 썼는데 이게 너무 오래된거라 멀티바이트다? mbcs다? 그럼 어쩔수없이 멀티바이트 써야댐

 

2. 빌드 모드가 맞아야한다. 여기서 말하는 빌드모드는 디버그냐 릴리즈냐, x86이냐 x64냐