source: trunk/Include/Classes/System/Runtime/InteropServices/GCHandle.ab@ 364

Last change on this file since 364 was 340, checked in by dai, 17 years ago

デリゲートを試験実装
【現状のデリゲート制約】
・ダイナミックメソッド限定
・パラメータ相違チェックは行っていない

GCHandle.allocatedメンバをListクラスに変更。
List.Removeメソッドを追加

File size: 1.5 KB
Line 
1' Classes/System/Runtime/InteropServices/GCHandle.ab
2
3Namespace System
4Namespace Runtime
5Namespace InteropServices
6
7Class GCHandle
8Public
9 Function Target() As Object
10 Dim pobj = VarPtr(handle) As *Object
11 Return pobj[0]
12 End Function
13
14 Sub Target(obj As Object)
15 allocated.Add(obj)
16 handle = ObjPtr(obj)
17 End Sub
18
19 Const Function IsAllocated() As Boolean
20 Return handle <> 0
21 End Function
22
23 Static Function Alloc(obj As Object) As GCHandle
24 Alloc = New GCHandle
25 Alloc.Target = obj
26 End Function
27
28 Sub Free()
29 allocated.Remove(Target)
30 handle = 0
31 End Sub
32
33 Static Function ToIntPtr(h As GCHandle) As LONG_PTR
34 Return h.handle As LONG_PTR
35 End Function
36
37 Static Function FromIntPtr(ip As LONG_PTR) As GCHandle
38 FromIntPtr = New GCHandle
39 FromIntPtr.handle = ip As VoidPtr
40 End Function
41
42 Override Function GetHashCode() As Long
43 Return _System_HashFromPtr(handle)
44 End Function
45
46 Function Equals(y As GCHandle) As Boolean
47 Return handle = y.handle
48 End Function
49
50 Function Operator == (y As GCHandle) As Boolean
51 Return Equals(y)
52 End Function
53
54 Function Operator <> (y As GCHandle) As Boolean
55 Return Not Equals(y)
56 End Function
57
58 Override Function ToString() As String
59 Return "System.Runtime.InteropServices.GCHandle"
60 End Function
61
62'Private
63 Sub GCHandle()
64 End Sub
65
66Private
67 handle As VoidPtr
68
69 Static allocated = New System.Collections.Generic.List<Object>
70End Class
71
72End Namespace 'System
73End Namespace 'Runtime
74End Namespace 'InteropServices
Note: See TracBrowser for help on using the repository browser.