Ignore:
Timestamp:
Aug 24, 2008, 5:28:59 PM (16 years ago)
Author:
イグトランス (egtra)
Message:

サブクラス化機構(Control.Attach)の整備

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ab5.0/ablib/src/Classes/ActiveBasic/Windows/Windows.ab

    r603 r615  
    112112@brief  Windowsのエラー値を基に例外を投げる
    113113@param[in] dwErrorCode  Win32エラーコード
     114@param[in] msg  補足説明
    114115@throw WindowsException 常に投げられる。
    115116@date 2008/07/13
    116117@auther Egtra
    117118*/
    118 Sub ThrowWithErrorCode(dwErrorCode As DWord)
    119     Throw New WindowsException(HRESULT_FROM_WIN32(dwErrorCode))
     119Sub ThrowWithErrorCode(dwErrorCode As DWord, msg = Nothing As String)
     120    Throw New WindowsException(HRESULT_FROM_WIN32(dwErrorCode), msg)
    120121End Sub
    121 
    122122/*!
    123 @brief 内部でGetLastErrorを呼んで、その値を基に例外を投げる。
    124 @throw WindowsException 常に投げられる。
     123@brief WindowsExceptionを投げるラッパ。直前に呼び出したAPI関数などが失敗したときに用いる。
     124@param[in] msg 補足説明
     125@throw WindowsException 常に投げられる。
     126@date 2008/08/20
     127@auther Egtra
     128WindowsExceptionを構築する際、GetLastError()の値を渡す。
     129この関数では、直前のAPI関数が成功したかどうかを調べられないことに注意。
     130*/
     131Sub ThrowWithLastError(msg = Nothing As String)
     132    ThrowWithErrorCode(GetLastError(), msg)
     133End Sub
     134/*!
     135@brief (主にuser32の全部、gdi32の一部が対象)WindowsExceptionを投げるラッパ。直前に呼び出したAPI関数などが失敗したときに用いる。
     136@param[in] msg 補足説明
     137@throw WindowsException 常に投げられる。
    125138@date 2008/08/26
    126139@auther Egtra
     140user32やgdi32の一部など、9xではGetLastErrorでエラーメッセージが取得できないものがある。
     141そのため、9xでは一律にmsgのみでWindowsExceptionを構築して投げるようにしている。
     142
     143ところで、CEではNT同様GetLastErrorが使用できるため、
     144CEへの移植を仮定すると、関数名にNTと付けるのがそぐわないと感じる。代案募集中。
    127145*/
    128 Sub ThrowWithLastError()
    129     ThrowWithErrorCode(GetLastError())
     146Sub ThrowWithLastErrorNT(msg As String)
     147    If Not Version.Is9x() Then
     148        ThrowWithErrorCode(GetLastError(), msg)
     149    Else
     150        Throw New WindowsException(msg)
     151    End If
    130152End Sub
    131153/*!
    132154@brief  HRESULT値を基に例外を投げる。
    133 @date   2008/07/13
    134 @param[in] hr   HRESULT値
     155@param[in] hr HRESULT値
     156@param[in] msg 補足説明
    135157@throw WindowsException FAILED(hr)が真の場合
    136 @auther Egtra
     158@date 2008/07/13
     159@auther Egtra
    137160hrが成功値 (FAILED(hr) = False) の場合、この関数は何も行わない。
    138161*/
    139 Sub ThrowIfFailed(hr As HRESULT)
     162Sub ThrowIfFailed(hr As HRESULT, msg = Nothing As String)
    140163    If FAILED(hr) Then
    141         Throw New WindowsException(hr)
     164        Throw New WindowsException(hr, msg)
    142165    End If
    143166End Sub
Note: See TracChangeset for help on using the changeset viewer.