-
[Windows Programming] ์ ๋์ฝ๋์ ANSIWindows Programming 2020. 1. 19. 15:35๋ฐ์ํ
- ์ด ๊ธ์ ์ ํ๋ฆฌ ๋ฆฌ์ฒ์ "Windows via C/C++"์ ํ ๋๋ก ์์ฑํ์์ต๋๋ค
C ์ธ์ด ๊ฐ๋ฐ์๋ผ๋ฉด C ์ด์ด์ char ์๋ฃํ์ด 8๋นํธ์ ANSI ๋ฌธ์๋ฅผ ํํํ๊ธฐ ์ํด ์กด์ฌํ๋ค๋ ๊ฒ์ ์๊ณ ์๋ค.
๋ง์ดํฌ๋ก์ํํธ์ C/C++ ์ปดํ์ผ๋ฌ๋ 16๋นํธ ์ ๋์ฝ๋(UTF-16)์ ํํํ๊ธฐ ์ํ wchar_t ์๋ฃํ์ ๋ด์ฅ ์๋ฃํ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์๋ค.
ANSI ๋ฌธ์์ ์ ๋์ฝ๋ ๋ฌธ์
ANSI
// 8๋นํธ ๋ฌธ์
char c = 'A'
// 99๊ฐ์ 8๋นํธ ๋ฌธ์์ 8๋นํธ ๋ฌธ์์ด ์ข ๊ฒฐ ๋ฌธ์(0)
char szBuffer[100] = "A String"
์ ๋์ฝ๋
// 16๋นํธ ๋ฌธ์
wchar_t c = L'A'
// 99๊ฐ์ 16๋นํธ ๋ฌธ์์ 16๋นํธ ๋ฌธ์์ด ์ข ๊ฒฐ ๋ฌธ์(0)
Wchar_t szBuffer[100] = L"A String
๋ง์ดํฌ๋ก์ํํธ์ ์๋์ฐ ํ์ C์ธ์ด์ ์๋ฃํ์ผ๋ก๋ถํฐ ์๋์ฐ ์๋ฃํ์ ๊ตฌ๋ถ ์ง๊ธฐ ์ํด WinNT.h ํค๋ ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ ์๋ฃํ์ ์ ์ํ๊ณ ์๋ค.
typedef char CHAR. // 8๋นํธ ๋ฌธ์
typedef wchar_t WCHAR // 16๋นํธ ๋ฌธ์
์ปดํ์ผ ์ ANSI ๋ฌธ์๋ ์ ๋์ฝ๋ ๋ฌธ์๋ฅผ ์ฌ์ฉํ๋๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅํ๊ฒ ์์ค์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค
ifdef UNICODE
define __TEXT(quote) quote
define __TEXT(quote) L##quote
์ ๋์ฝ๋ ๋ฌธ์๋ฅผ ์ฌ์ฉ์ ์๋์ ์ ์, ANSI ๋ฌธ์ ์ฌ์ฉ ์ ์์ ์ ์๋ฅผ ์ฌ์ฉํ๋ค
์๋์ฐ ๋ด์ ์ ๋์ฝ๋ ํจ์์ ANSI ํจ์
CreateWindowExW๋ ์ ๋์ฝ๋ ๋ฌธ์์ด์ ์ธ์๋ก ์ทจํ๋ ๋ฒ์ ์ด๋ค. ํจ์๋ช ๋์ ์ถ๊ฐ๋ W๋ Wide๋ฅผ ์๋ฏธํ๋ค. ์ ๋์ฝ๋ ๋ฌธ์๋ 8๋นํธ ๊ธธ์ด๋ณด๋ค ๊ธด 16๋นํธ ๊ธธ์ด๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ์ข ์ข wide character๋ผ๊ณ ๋ถ๋ฆฐ๋ค. CreateWindowExA์ ๊ฐ์ด ํจ์๋ช ๋์ ๋ถ์ฌ์ง A๋ ASNI ๋ฌธ์์ด์ ์ธ์๋ก ์ทจํ๋ค๋ ์๋ฏธ์ด๋ค.
WinUser.h ํ์ผ ๋ณด๋ฉด ์๋์ผ๋ก ์์ค์ฝ๋ ๋ณ๊ฒฝ ๊ฐ๋ฅํ๊ฒ ์์ฑํ๋ค.
ifdef UNICODE
define CreateWindowEx CreateWindowExW
else
define CreateWindowEx CreateWindowExa
Endif
๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ด์ ์ ๋์ฝ๋ ํจ์์ ANSI ํจ์
์๋์ฐ ํจ์์ ๋ง์ฐฌ๊ฐ์ง๋ก C ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ANSI ๋ฌธ์๋ฅผ ๋ค๋ฃจ๋ ํจ์์ ์ ๋์ฝ๋ ๋ฌธ์๋ฅผ ๋ค๋ฃจ๋ ํจ์๋ฅผ ์ธํธ๋ก ์ ๊ณตํ๊ณ ์๋ค. ํ์ง๋ง ์๋์ฐ ํจ์์๋ ๋ค๋ฅด๊ฒ C ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ๊ณตํ๋ ANSI ํจ์๋ ์ฌ์ ํ ์ ๋์ํ๋ฉฐ, ์ ๋์ฝ๋๋ก์ ๋ณ๊ฒฝ์ ์ํํ์ง ์์ ๋ฟ๋๋ฌ ๋ด๋ถ์ ์ผ๋ก ์ ๋์ฝ๋ ๋ฒ์ ์ ํจ์๋ฅผ ํธ์ถํ์ง๋ ์๋๋ค.
C ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ํ์ ์ธ ํจ์๋ก ANSI ๋ฌธ์์ด ๊ธธ์ด๋ฅผ ๋ฐํํ๋ strlen ํจ์์ ์ ๋์ฝ๋ ๋ฌธ์์ด์ ๋ํด ๋์ผํ ๊ธฐ๋ฅ์ ์ํํ๋ wcslen ํจ์๊ฐ ์๋ค
Ifdef _UNICODE
Define _tcslen. wcslen
else
Define _tcslen strlen
endif
_tcslen์ ์ฌ์ฉํ๋ฉด _UNICODE๊ฐ ์ ์๋์ด ์์ ๊ฒฝ์ฐ wcslen์ผ๋ก ๋ณ๊ฒฝ, ๊ทธ๋ ์ง ์์ผ๋ฉด strlen์ผ๋ก ๋ณ๊ฒฝ๋๋ค.
์ค์!!
๋ฌธ์์ด์ ๋ค๋ฃจ๋ ํจ์๋ค์ ํญ์ ์ ์ฌ์ ์ธ ์ํ์ ๋ ธ์ถ๋์ด ์๋ค. ๋ฌธ์์ด ๋ฒํผ๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ด๊ธฐ์ ์ถฉ๋ถํ์ง ์๋ค๋ฉด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ค. ๋ฉ๋ชจ๋ฆฌ์ ๋ฌธ์ ๊ฐ ์๊ฒจ๋ ์๋ฌ๋ฅผ ๋ณด๊ณ ๋ฐ์ ์ ์๊ณ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ์์ ์ผ๋ก ์ด์ฉ๋๊ณ ์๋์ง ์ ๋ฐฉ๋ฒ๋ ์๋ค. ์ด๊ฑธ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ง์ดํฌ๋ก์ํํธ๋ StrSafe.h ํ์ผ์ ํตํด ์์ ๋ฌธ์์ด ํจ์๋ฅผ ์ ๊ณตํด์ค๋ค
๋ฐ๋ผ์ ๊ฐ๋ฐ์๋ค์ ์ ๋์ฝ๋ ๋ฌธ์์ด๊ณผ ์์ ๋ฌธ์์ด ํจ์๋ฅผ ์ฌ์ฉํ๋ ์ต๊ด์ด ๊ธธ๋ฌ์ ธ์ผ ํ๋ค.
- ์ถ๊ฐ๋ก ๊ถ๊ธํ ์ ์ด๋ ์์ ํ ๋ถ๋ถ์ด ์์ผ๋ฉด ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์ธ์
๋ฐ์ํ'Windows Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ