ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Windows Programming] ์œ ๋‹ˆ์ฝ”๋“œ์™€ ANSI
    Windows 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 ํŒŒ์ผ์„ ํ†ตํ•ด ์•ˆ์ „ ๋ฌธ์ž์—ด ํ•จ์ˆ˜๋ฅผ ์ œ๊ณตํ•ด์ค€๋‹ค

    ๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ์ž๋“ค์€ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž์—ด๊ณผ ์•ˆ์ „ ๋ฌธ์ž์—ด ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์Šต๊ด€์ด ๊ธธ๋Ÿฌ์ ธ์•ผ ํ•œ๋‹ค.



    • ์ถ”๊ฐ€๋กœ ๊ถ๊ธˆํ•œ ์ ์ด๋‚˜ ์ˆ˜์ •ํ•  ๋ถ€๋ถ„์ด ์žˆ์œผ๋ฉด ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์„ธ์š”
    ๋ฐ˜์‘ํ˜•
Designed by Tistory.