ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Windows Programming] μ—λŸ¬ 핸듀링(Error handling) [1]
    Windows Programming 2020. 1. 13. 23:01
    λ°˜μ‘ν˜•
    • 이 글은 μ œν”„λ¦¬ 리처의 "Windows via C/C++"을 ν† λŒ€λ‘œ μž‘μ„±ν–ˆμŠ΅λ‹ˆλ‹€.

    μ—λŸ¬ 핸듀링

    μœˆλ„μš° ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄ 호좜된 ν•¨μˆ˜λŠ” λ¨Όμ € μ „λ‹¬λœ 인자의 μœ νš¨μ„±μ„ ν™•μΈν•˜κ³  ν•¨μˆ˜μ˜ κΈ°λŠ₯ μˆ˜ν–‰ν•œλ‹€.

    만일 μ „λ‹¬λœ μΈμžκ°€ μœ νš¨ν•˜μ§€ μ•Šκ±°λ‚˜ λ‹€λ₯Έ 이유둜 인해 ν•΄λ‹Ή κΈ°λŠ₯을 μˆ˜ν–‰ν•  수 μ—†μœΌλ©΄ ν•¨μˆ˜λŠ” μ‹€νŒ¨λ₯Ό λ°˜ν™˜ν•œλ‹€.

    μœˆλ„μš° ν•¨μˆ˜λŠ” μ‹€νŒ¨ν•˜λ©΄ ν•¨μˆ˜ μ‹€νŒ¨ μ—¬λΆ€λ₯Ό μ•Œμ•„λ‚΄λŠ” κ³Όμ • ν•„μš”ν•˜λ‹€.

    λ§ˆμ΄ν¬λ‘œμ†Œν”„νŠΈλŠ” λͺ¨λ“  μ—λŸ¬μ½”λ“œλ₯Ό 32λΉ„νŠΈ 숫자둜 μ •μ˜ν•΄ λ‘μ—ˆλ‹€. [2]νŽΈμ—μ„œ μ„€λͺ…

    • μœˆλ„μš° ν•¨μˆ˜κ°€ μ‹€νŒ¨ν•˜λ©΄ λ‚΄λΆ€μ μœΌλ‘œ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œ μŠ€λ ˆλ“œμ˜ μŠ€λ ˆλ“œ 지역 μ €μž₯μ†Œμ— μ—λŸ¬ μ½”λ“œ μ €μž₯
      => μ—¬λŸ¬ μŠ€λ ˆλ“œ λ™μ‹œ μˆ˜ν–‰ν•˜λ”λΌλ„ μƒν˜Έκ°„ 영ν–₯을 λ―ΈμΉ˜μ§€ μ•Šκ³  μŠ€λ ˆλ“œλ³„ μ—λŸ¬ μ½”λ“œ μœ μ§€

    DWORD GetLastError

    μ–΄λ–€ μ—λŸ¬κ°€ λ°œμƒν–ˆλŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ μ‚¬μš©

    μ΅œκ·Όμ— 호좜된 ν•¨μˆ˜μ˜ μ—λŸ¬ μ½”λ“œλ₯Ό μŠ€λ ˆλ“œ 지역 μ €μž₯μ†Œλ‘œλΆ€ν„° κ°€μ Έμ˜€λŠ” ν•¨μˆ˜


    μ—λŸ¬λŠ” λ©”μ‹œμ§€ ID, λ©”μ‹œμ§€ ν…μŠ€νŠΈ, μ—λŸ¬ μ½”λ“œ 3가지 μš”μ†Œλ‘œ ꡬ성
    • μœˆλ„μš° ν•¨μˆ˜ μ„±κ³΅ν•˜λ©΄ ERROR_SUCCESSλ₯Ό μ—λŸ¬ μ½”λ“œλ‘œ κΈ°λ‘ν•œλ‹€.

    • ν•˜μ§€λ§Œ λͺ‡λͺ‡ μœˆλ„μš° ν•¨μˆ˜λŠ” λ‹€λ₯Έ 이유둜 μ„±κ³΅ν•œλ‹€.

    • 예λ₯Ό λ“€λ©΄ λͺ…λͺ…λœ 이벀트 컀널 였브젝트λ₯Ό μƒμ„±ν•˜λŠ” ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄ μƒμ„±λ˜λŠ” 경우 외에도 이미 동일 μ΄λ¦„μ˜ 컀널 μ˜€λΈŒμ νŠΈκ°€ μ‘΄μž¬ν•˜λŠ” κ²½μš°μ—λ„ 성곡을 λ°˜ν™˜ν•œλ‹€. 이 λ•Œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ 성곡 이유λ₯Ό κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ GetLastError ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•΄μ•Ό ν•  μˆ˜λ„ μžˆλ‹€.



      쑰사식을 톡해 $err,hr 둜 ν™•μΈν•˜λ©΄ λ‹€μŒκ³Ό 같이 μ—λŸ¬λ₯Ό 확인할 수 μžˆλ‹€. μ—λŸ¬ μ½”λ“œλ§Œ 가지고도 μ—λŸ¬ 메세지λ₯Ό ν™•μΈν•˜λŠ” 방법이 μžˆλ‹€. λ©”λ‰΄μ—μ„œ 도ꡬ듀어가 였λ₯˜μ‘°νšŒλ₯Ό 눌러 μ—λŸ¬ μ½”λ“œλ‘œ λ©”μ‹œμ§€λ₯Ό ν™•μΈν•œλ‹€.

    DWORD FormatMessage

    μ—λŸ¬ μ½”λ“œλ₯Ό λ©”μ‹œμ§€ ν…μŠ€νŠΈλ‘œ λ³€ν™˜ν•΄ μ£ΌλŠ” ν•¨μˆ˜, μ‚¬μš©μžμ—κ²Œ 보여쀄 λ©”μ‹œμ§€ ν…μŠ€νŠΈλ₯Ό ꡬ성

    • DWORD dwFlags

      FORMAT_MESSAGE_FROM_SYSTEM : μš΄μ˜μ²΄μ œκ°€ μ •μ˜ν•˜κ³  μžˆλŠ” μ—λŸ¬ μ½”λ“œμ™€ λŒ€μ‘λ˜λŠ” λ©”μ‹œμ§€ ν…μŠ€νŠΈ μ–»κ³ μž ν•œλ‹€λŠ” 것을 μ•Œλ¦¬λŠ” μ—­ν• 

      FORMAT_MESSAGE_ALLOCATE_BUFFER : μ—λŸ¬ λ©”μ‹œμ§€ ν…μŠ€νŠΈλ₯Ό μ €μž₯ν•  수 μžˆλŠ” μΆ©λΆ„ν•œ λ©”λͺ¨λ¦¬ 곡간을 ν• λ‹Ήν•΄ 쀄 것을 μš”μ²­

      FORMAT_MESSAGE_IGNORE_INSERT : λ©”μ‹œμ§€ ν…μŠ€νŠΈμ— %둜 μ‹œμž‘ν•˜λŠ” 자리 ν‘œμ‹œμžλ₯Ό μ‹€μ§ˆμ μΈ κ°’μœΌλ‘œ λ³€κ²½ν•˜μ§€ μ•Šμ„ 것을 μ§€μ •ν•˜λŠ” ν”Œλž˜κ·Έ ( μΆ”κ°€ 정보 제곡 => 자리 ν‘œμ‹œμž )

    • LPCVOID pSource : The location of the message definition( msdn docs μ°Έμ‘° )

    • DWORD dwMessageId : μ—λŸ¬ μ½”λ“œ

    • DWORD dwLanguageId : μ–Έμ–΄ μ‹λ³„μž ( κΈ°λ³Έ μ–Έμ–΄ μ„€μ • 0 )

    • PTSTA pszBuffer : λ©”μ‹œμ§€ μ €μž₯ 버퍼 μ‹œμž‘ μ£Όμ†Œ

    • DWORD nSize : 버퍼 크기, FORMAT_MESSAGE_ALLOCATION_BUFFER 있으면 0

    • va_list *Arguments : 자리 ν‘œμ‹œμžμ— λ‚˜νƒ€λ‚  정보 ν‘œμ‹œ
      μ—λŸ¬ λ©”μ‹œμ§€ ν…μŠ€νŠΈμ˜ λ‚΄μš©μ„ 미리 μ•Œ 수 μ—†μ–΄μ„œ ν™œμš© λΆˆκ°€λŠ₯

    • μΆ”κ°€ μˆ˜μ •μ‚¬ν•­μ΄λ‚˜ κΆκΈˆν•œ 점있으면 λŒ“κΈ€λ‘œ λ‚¨κ²¨μ£Όμ„Έμš”.
    λ°˜μ‘ν˜•
Designed by Tistory.