'Classes/ActiveBasic/ObjectHandle.ab /*! @file @brief GC避け用のオブジェクトハンドルについての関数群。 */ Namespace ActiveBasic /*! @brief オブジェクトハンドルを確保する。 @param[in] obj ハンドル化したいオブジェクト @return ハンドル @throw ArgumentNullException objがNothingのとき @throw OutOfMemoryException ハンドル領域の確保ができなかったとき @date 2008/08/13 @auther Egtra */ Function AllocObjectHandle(obj As Object) As LONG_PTR If IsNothing(obj) Then Throw New System.ArgumentNullException("obj") End If Detail.handleList.Add(obj) AllocObjectHandle = ObjPtr(obj) As LONG_PTR End Function /*! @brief オブジェクトハンドルからオブジェクトを得る。 @param[in] h ハンドル @return 対応するオブジェクト @throw ArgumentNullException hが0のとき @date 2008/08/13 @auther Egtra */ Function GetObjectFromHandle(h As LONG_PTR) As Object If h = 0 Then Throw New System.ArgumentNullException("h") End If GetObjectFromHandle = _System_PtrObj(h As VoidPtr) System.Diagnostics.Debug.Assert(Not IsNothing(GetObjectFromHandle)) End Function /*! @brief オブジェクトハンドルを解放する。 @param[in] h ハンドル @return 対応するオブジェクト @throw ArgumentNullException hが0のとき @date 2008/08/13 @auther Egtra */ Function ReleaseObjectHandle(h As LONG_PTR) As Object If h = 0 Then Throw New System.ArgumentNullException("h") End If ReleaseObjectHandle = _System_PtrObj(h As VoidPtr) Detail.handleList.Remove(ReleaseObjectHandle) System.Diagnostics.Debug.Assert(Not IsNothing(ReleaseObjectHandle)) End Function Namespace Detail Dim handleList = New System.Collections.Generic.List End Namespace End Namespace