Index: trunk/Include/Classes/ActiveBasic/Strings/SPrintF.ab
===================================================================
--- trunk/Include/Classes/ActiveBasic/Strings/SPrintF.ab	(revision 383)
+++ trunk/Include/Classes/ActiveBasic/Strings/SPrintF.ab	(revision 384)
@@ -926,4 +926,5 @@
 
 /*!
+@brief	SPrintfから呼ばれる浮動小数点数用書式文字列化関数
 @author	Egtra
 @date	2007/10/28
@@ -943,4 +944,5 @@
 
 /*!
+@brief	SPrintfから呼ばれる整数用書式文字列化関数
 @author	Egtra
 @date	2007/10/28
@@ -1054,5 +1056,5 @@
 Function ReadInt(ByRef fmt As *StrChar, params As *Object, ByRef paramsCount As SIZE_T, ByRef ret As Long) As Boolean
 	If fmt[0] = &h2a Then '*
-		fmt++ 'p
+		fmt = VarPtr(fmt[1]) 'po
 		ret = params[paramsCount] As System.Int32
 		paramsCount++
@@ -1100,5 +1102,5 @@
 				Exit Do
 		End Select
-		fmt++ 'p
+		fmt = VarPtr(fmt[1]) 'po
 	Loop
 	ReadFlags = True
@@ -1143,5 +1145,5 @@
 
 	If fmt[0] = &h2e Then '.
-		fmt++
+		fmt = VarPtr(fmt[1]) 'po
 		Dim t As Long
 		ReadPrecision = 0
@@ -1155,4 +1157,10 @@
 	End If
 End Function
+
+#ifdef _WIN64
+Const PtrLength = 1
+#else
+Const PtrLength = 0
+#endif
 
 /*!
@@ -1170,27 +1178,28 @@
 			Case &h68 'h
 				lengthSpec--
-			Case &h6a 'j (u)intmax_t
+			Case &h6a 'j (u)intmax_t = QWord, Int64
 				lengthSpec = 1
-#ifdef _WIN64
 			Case &h74 't ptrdiff_t
-				lengthSpec = 1
-			Case &h7a 'z (s)size_t,
-				lengthSpec = 1
-#else
-			Case &h74 't ptrdiff_t
-				lengthSpec = 0
-			Case &h7a 'z (s)size_t,
-				lengthSpec = 0
-#endif
+				lengthSpec = PtrLength
+			Case &h7a 'z (s)size_t
+				lengthSpec = PtrLength
+			Case &h70 'p VoidPtr 本来は変換指定子だが、ここで先読み
+				lengthSpec = PtrLength
+				Exit Sub 'fmtを進められると困るので、ここで脱出
 			Case Else
 				Exit Sub
 		End Select
-		fmt++ 'p
+		fmt = VarPtr(fmt[1]) 'po
 	Loop
 End Sub
 
 /*!
-@author	Egtra
-@date	2007/10/27
+@biref	Cのsprintfのような書式文字列出力関数
+@author	Egtra
+@date	2007/10/27
+@param[in] format	書式文字列。詳細は開発Wiki参照。
+@param[in, out] params	変換対象の配列。n = 0のときにはNULLも可。
+@param[in] n	paramsの個数。
+@return	書式化された文字列。
 @todo	%nへの対応
 */
@@ -1201,5 +1210,5 @@
 	Dim s = New System.Text.StringBuilder
 	Do
-		Dim last = format.Length - (fmt - StrPtr(format)) As Long 'p
+		Dim last = format.Length - (((fmt - StrPtr(format)) \ SizeOf (StrChar)) As LONG_PTR) As Long 'po
 		Dim pos = ActiveBasic.Strings.ChrFind(fmt, last, &h25 As StrChar) '&h25 = %
 		If pos = -1 Then
@@ -1209,5 +1218,5 @@
 		'%以前の部分
 		s.Append(fmt, 0, pos)
-		fmt += pos + 1 'p
+		fmt = VarPtr(fmt[pos + 1]) 'po
 		'フラグの読取
 		Dim flags = None As FormatFlags
@@ -1239,4 +1248,7 @@
 			Case &h58 'X
 				FormatInteger(s, TraitsIntegerX, params[i], False, typeWidth, precision, fieldWidth, flags Or Cap)
+'現状ではVoidPtrを引数にする手段は無いはず
+'			Case &h58 'p
+'				FormatInteger(s, TraitsIntegerX, params[i], False, typeWidth, precision, fieldWidth, flags Or Cap)
 			Case &h65 'e
 				FormatFloat(s, AddressOf(FormatFloatE), params[i], precision, fieldWidth, flags)
@@ -1266,5 +1278,5 @@
 				Exit Do
 		End Select
-		fmt++ 'p
+		fmt = VarPtr(fmt[1]) 'po
 		i++
 	Loop
