Index: trunk/ab5.0/ablib/src/Classes/System/Runtime/InteropServices/GCHandle.ab
===================================================================
--- trunk/ab5.0/ablib/src/Classes/System/Runtime/InteropServices/GCHandle.ab	(revision 532)
+++ trunk/ab5.0/ablib/src/Classes/System/Runtime/InteropServices/GCHandle.ab	(revision 536)
@@ -8,9 +8,13 @@
 Public
 	Function Target() As Object
-		Dim pobj = VarPtr(handle) As *Object
-		Return pobj[0]
+		Target = _System_PtrObj(handle)
 	End Function
 
 	Sub Target(obj As Object)
+		If handle <> 0 Then
+			Dim i = allocated.IndexOf(Target())
+			'assert(i <> -1)
+			allocated[i] = obj
+		End If
 		allocated.Add(obj)
 		handle = ObjPtr(obj)
Index: trunk/ab5.0/ablib/src/Classes/System/Threading/Thread.ab
===================================================================
--- trunk/ab5.0/ablib/src/Classes/System/Threading/Thread.ab	(revision 532)
+++ trunk/ab5.0/ablib/src/Classes/System/Threading/Thread.ab	(revision 536)
@@ -19,23 +19,23 @@
 
 Enum ThreadState
-	'スレッド状態に AbortRequested が含まれ、そのスレッドは停止していますが、状態はまだ Stopped に変わっていません。  
+	'スレッド状態に AbortRequested が含まれ、そのスレッドは停止していますが、状態はまだ Stopped に変わっていません。
 	Aborted
-	'スレッド上で Thread.Abort メソッドを呼び出しますが、そのスレッドの終了を試みる保留中の System.Threading.ThreadAbortException をスレッドが受け取っていません。  
+	'スレッド上で Thread.Abort メソッドを呼び出しますが、そのスレッドの終了を試みる保留中の System.Threading.ThreadAbortException をスレッドが受け取っていません。
 	AbortRequested
-	'スレッドは、フォアグラウンド スレッドではなく、バックグランド スレッドとして実行します。この状態は、Thread.IsBackground プロパティを設定して制御されます。  
+	'スレッドは、フォアグラウンド スレッドではなく、バックグランド スレッドとして実行します。この状態は、Thread.IsBackground プロパティを設定して制御されます。
 	Background
-	'スレッドをブロックせずに起動します。保留中の ThreadAbortException もありません。  
+	'スレッドをブロックせずに起動します。保留中の ThreadAbortException もありません。
 	Running
-	'スレッドを停止します。  
+	'スレッドを停止します。
 	Stopped
-	'スレッドの停止を要求します。これは、内部でだけ使用します。  
+	'スレッドの停止を要求します。これは、内部でだけ使用します。
 	StopRequested
-	'スレッドを中断します。  
+	'スレッドを中断します。
 	Suspended
-	'スレッドの中断を要求します。  
+	'スレッドの中断を要求します。
 	SuspendRequested
-	'スレッド上に Thread.Start メソッドを呼び出しません。  
+	'スレッド上に Thread.Start メソッドを呼び出しません。
 	Unstarted
-	'スレッドがブロックされています。これは、Thread.Sleep または Thread.Join の呼び出し、ロックの要求 (たとえば、Monitor.Enter や Monitor.Wait の呼び出しによる)、または ManualResetEvent などのスレッド同期オブジェクトの待機の結果である可能性があります。   
+	'スレッドがブロックされています。これは、Thread.Sleep または Thread.Join の呼び出し、ロックの要求 (たとえば、Monitor.Enter や Monitor.Wait の呼び出しによる)、または ManualResetEvent などのスレッド同期オブジェクトの待機の結果である可能性があります。
 	WaitSleepJoin
 End Enum
@@ -144,5 +144,5 @@
 		End If
 	End Function
-	
+
 	'Priority Property
 	Sub Priority(value As ThreadPriority)
@@ -177,6 +177,6 @@
 
 	Sub Start()
-		Dim ThreadId As DWord
-		m_hThread=_beginthreadex(NULL,0,AddressOf(_run),VarPtr(This),CREATE_SUSPENDED,m_dwThreadId)
+		Dim pfn = AddressOf(_run) As LONG_PTR
+		m_hThread=CreateThread(NULL,0,pfn As LPTHREAD_START_ROUTINE,VarPtr(This),CREATE_SUSPENDED,m_dwThreadId)
 		SetThreadPriority(m_hThread,m_Priority)
 		This.Resume()
@@ -216,5 +216,5 @@
 	/*------------------------ クラス内部用 --------------------------*/
 Private
-	Function Cdecl _run() As Long
+	Function _run() As Long
 		'------------
 		' 前処理
