Index: /Include/Classes/System/String.ab
===================================================================
--- /Include/Classes/System/String.ab	(revision 191)
+++ /Include/Classes/System/String.ab	(revision 192)
@@ -240,4 +240,5 @@
 		If AllocStringBuffer(textLengthW) <> 0 Then
 			MultiByteToWideChar(CP_THREAD_ACP, 0, text, textLengthA, Chars, textLengthW)
+			Chars[textLengthW] = 0
 		End If
 #endif
@@ -249,4 +250,5 @@
 		If AllocStringBuffer(textLengthA) <> 0 Then
 			WideCharToMultiByte(CP_THREAD_ACP, 0, text, textLengthW, Chars, textLengthA, 0, 0)
+			Chars[textLengthA] = 0
 		End If
 #else
@@ -466,5 +468,5 @@
 		memcpy(VarPtr(Remove.Chars[startIndex]), VarPtr(This.Chars[startIndex + count]), SizeOf (StrChar) * (m_Length - startIndex - count))
 	End Function
-/*
+
 	Static Function IsNullOrEmpty(s As String) As Boolean
 		If s <> Nothing Then
@@ -475,5 +477,5 @@
 		Return False
 	End Function
-*/
+
 	Const Function Replace(oldChar As StrChar, newChar As StrChar) As String
 		Replace = Copy(This)
Index: /Include/OAIdl.ab
===================================================================
--- /Include/OAIdl.ab	(revision 191)
+++ /Include/OAIdl.ab	(revision 192)
@@ -21,7 +21,8 @@
 Const VARIANT_FALSE = (0 As VARIANT_BOOL) ' WTypes.ab
 TypeDef SCODE = Long
-Type /*Class*/ CY ' WTypes.ab
-Public
-	int64 As Int64
+TypeDef CY = Int64
+'Type /*Class*/ CY ' WTypes.ab
+'Public
+'	int64 As Int64
 /*
 	Function Lo() As DWord
@@ -41,5 +42,5 @@
 	End Sub
 */
-End Type'Class
+'End Type'Class
 
 Type /*Class*/ DECIMAL ' WTypes.ab
Index: /Include/OleAuto.ab
===================================================================
--- /Include/OleAuto.ab	(revision 191)
+++ /Include/OleAuto.ab	(revision 192)
@@ -131,5 +131,5 @@
 ' VARTYPE Coercion API
 Declare Function VarUI1FromI2 Lib "oleaut32" (sIn As Integer, ByRef bOut As Byte) As HRESULT
-Declare Function VarUI1FromI4 Lib "oleaut32" (lIn As LONG, ByRef bOut As Byte) As HRESULT
+Declare Function VarUI1FromI4 Lib "oleaut32" (lIn As Long, ByRef bOut As Byte) As HRESULT
 Declare Function VarUI1FromI8 Lib "oleaut32" (i64In As Int64, ByRef bOut As Byte) As HRESULT
 Declare Function VarUI1FromR4 Lib "oleaut32" (fltIn As Single, ByRef bOut As Byte) As HRESULT
@@ -140,5 +140,5 @@
 Declare Function VarUI1FromDisp Lib "oleaut32" (pdispIn As *IDispatch, lcid As LCID, ByRef bOut As Byte) As HRESULT
 Declare Function VarUI1FromBool Lib "oleaut32" (boolIn As VARIANT_BOOL, ByRef bOut As Byte) As HRESULT
-Declare Function VarUI1FromI1 Lib "oleaut32" (cIn As CHAR, ByRef bOut As Byte) As HRESULT
+Declare Function VarUI1FromI1 Lib "oleaut32" (cIn As SByte, ByRef bOut As Byte) As HRESULT
 Declare Function VarUI1FromUI2 Lib "oleaut32" (uiIn As Word, ByRef bOut As Byte) As HRESULT
 Declare Function VarUI1FromUI4 Lib "oleaut32" (ulIn As DWord, ByRef bOut As Byte) As HRESULT
@@ -147,5 +147,5 @@
 
 Declare Function VarI2FromUI1 Lib "oleaut32" (bIn As Byte, ByRef sOut As Integer) As HRESULT
-Declare Function VarI2FromI4 Lib "oleaut32" (lIn As LONG, ByRef sOut As Integer) As HRESULT
+Declare Function VarI2FromI4 Lib "oleaut32" (lIn As Long, ByRef sOut As Integer) As HRESULT
 Declare Function VarI2FromI8 Lib "oleaut32" (i64In As Int64, ByRef sOut As Integer) As HRESULT
 Declare Function VarI2FromR4 Lib "oleaut32" (fltIn As Single, ByRef sOut As Integer) As HRESULT
@@ -156,5 +156,5 @@
 Declare Function VarI2FromDisp Lib "oleaut32" (pdispIn As *IDispatch, lcid As LCID, ByRef sOut As Integer) As HRESULT
 Declare Function VarI2FromBool Lib "oleaut32" (boolIn As VARIANT_BOOL, ByRef sOut As Integer) As HRESULT
-Declare Function VarI2FromI1 Lib "oleaut32" (cIn As CHAR, ByRef sOut As Integer) As HRESULT
+Declare Function VarI2FromI1 Lib "oleaut32" (cIn As SByte, ByRef sOut As Integer) As HRESULT
 Declare Function VarI2FromUI2 Lib "oleaut32" (uiIn As Word, ByRef sOut As Integer) As HRESULT
 Declare Function VarI2FromUI4 Lib "oleaut32" (ulIn As DWord, ByRef sOut As Integer) As HRESULT
@@ -172,5 +172,5 @@
 Declare Function VarI4FromDisp Lib "oleaut32" (pdispIn As *IDispatch, lcid As LCID, ByRef lOut As Long) As HRESULT
 Declare Function VarI4FromBool Lib "oleaut32" (boolIn As VARIANT_BOOL, ByRef lOut As Long) As HRESULT
-Declare Function VarI4FromI1 Lib "oleaut32" (cIn As CHAR, ByRef lOut As Long) As HRESULT
+Declare Function VarI4FromI1 Lib "oleaut32" (cIn As SByte, ByRef lOut As Long) As HRESULT
 Declare Function VarI4FromUI2 Lib "oleaut32" (uiIn As Word, ByRef lOut As Long) As HRESULT
 Declare Function VarI4FromUI4 Lib "oleaut32" (ulIn As DWord, ByRef lOut As Long) As HRESULT
@@ -180,5 +180,5 @@
 Declare Function VarI8FromUI1 Lib "oleaut32" (bIn As Byte, ByRef i64Out As Int64) As HRESULT
 Declare Function VarI8FromI2 Lib "oleaut32" (sIn As Integer, ByRef i64Out As Int64) As HRESULT
-Declare Function VarI8FromI4 Lib "oleaut32" (lIn As LONG, ByRef i64Out As Int64) As HRESULT
+Declare Function VarI8FromI4 Lib "oleaut32" (lIn As Long, ByRef i64Out As Int64) As HRESULT
 Declare Function VarI8FromR4 Lib "oleaut32" (fltIn As Single, ByRef i64Out As Int64) As HRESULT
 Declare Function VarI8FromR8 Lib "oleaut32" (dblIn As Double, ByRef i64Out As Int64) As HRESULT
@@ -188,5 +188,5 @@
 Declare Function VarI8FromDisp Lib "oleaut32" (pdispIn As *IDispatch, lcid As LCID, ByRef i64Out As Int64) As HRESULT
 Declare Function VarI8FromBool Lib "oleaut32" (boolIn As VARIANT_BOOL, ByRef i64Out As Int64) As HRESULT
-Declare Function VarI8FromI1 Lib "oleaut32" (cIn As CHAR, ByRef i64Out As Int64) As HRESULT
+Declare Function VarI8FromI1 Lib "oleaut32" (cIn As SByte, ByRef i64Out As Int64) As HRESULT
 Declare Function VarI8FromUI2 Lib "oleaut32" (uiIn As Word, ByRef i64Out As Int64) As HRESULT
 Declare Function VarI8FromUI4 Lib "oleaut32" (ulIn As DWord, ByRef i64Out As Int64) As HRESULT
@@ -196,5 +196,5 @@
 Declare Function VarR4FromUI1 Lib "oleaut32" (bIn As Byte, ByRef fltOut As Single) As HRESULT
 Declare Function VarR4FromI2 Lib "oleaut32" (sIn As Integer, ByRef fltOut As Single) As HRESULT
-Declare Function VarR4FromI4 Lib "oleaut32" (lIn As LONG, ByRef fltOut As Single) As HRESULT
+Declare Function VarR4FromI4 Lib "oleaut32" (lIn As Long, ByRef fltOut As Single) As HRESULT
 Declare Function VarR4FromI8 Lib "oleaut32" (i64In As Int64, ByRef fltOut As Single) As HRESULT
 Declare Function VarR4FromR8 Lib "oleaut32" (dblIn As Double, ByRef fltOut As Single) As HRESULT
@@ -204,5 +204,5 @@
 Declare Function VarR4FromDisp Lib "oleaut32" (pdispIn As *IDispatch, lcid As LCID, ByRef fltOut As Single) As HRESULT
 Declare Function VarR4FromBool Lib "oleaut32" (boolIn As VARIANT_BOOL, ByRef fltOut As Single) As HRESULT
-Declare Function VarR4FromI1 Lib "oleaut32" (cIn As CHAR, ByRef fltOut As Single) As HRESULT
+Declare Function VarR4FromI1 Lib "oleaut32" (cIn As SByte, ByRef fltOut As Single) As HRESULT
 Declare Function VarR4FromUI2 Lib "oleaut32" (uiIn As Word, ByRef fltOut As Single) As HRESULT
 Declare Function VarR4FromUI4 Lib "oleaut32" (ulIn As DWord, ByRef fltOut As Single) As HRESULT
@@ -212,5 +212,5 @@
 Declare Function VarR8FromUI1 Lib "oleaut32" (bIn As Byte, ByRef dblOut As Double) As HRESULT
 Declare Function VarR8FromI2 Lib "oleaut32" (sIn As Integer, ByRef dblOut As Double) As HRESULT
-Declare Function VarR8FromI4 Lib "oleaut32" (lIn As LONG, ByRef dblOut As Double) As HRESULT
+Declare Function VarR8FromI4 Lib "oleaut32" (lIn As Long, ByRef dblOut As Double) As HRESULT
 Declare Function VarR8FromI8 Lib "oleaut32" (i64In As Int64, ByRef dblOut As Double) As HRESULT
 Declare Function VarR8FromR4 Lib "oleaut32" (fltIn As Single, ByRef dblOut As Double) As HRESULT
@@ -220,5 +220,5 @@
 Declare Function VarR8FromDisp Lib "oleaut32" (pdispIn As *IDispatch, lcid As LCID, ByRef dblOut As Double) As HRESULT
 Declare Function VarR8FromBool Lib "oleaut32" (boolIn As VARIANT_BOOL, ByRef dblOut As Double) As HRESULT
-Declare Function VarR8FromI1 Lib "oleaut32" (cIn As CHAR, ByRef dblOut As Double) As HRESULT
+Declare Function VarR8FromI1 Lib "oleaut32" (cIn As SByte, ByRef dblOut As Double) As HRESULT
 Declare Function VarR8FromUI2 Lib "oleaut32" (uiIn As Word, ByRef dblOut As Double) As HRESULT
 Declare Function VarR8FromUI4 Lib "oleaut32" (ulIn As DWord, ByRef dblOut As Double) As HRESULT
@@ -228,5 +228,5 @@
 Declare Function VarDateFromUI1 Lib "oleaut32" (bIn As Byte, ByRef dateOut As DATE) As HRESULT
 Declare Function VarDateFromI2 Lib "oleaut32" (sIn As Integer, ByRef dateOut As DATE) As HRESULT
-Declare Function VarDateFromI4 Lib "oleaut32" (lIn As LONG, ByRef dateOut As DATE) As HRESULT
+Declare Function VarDateFromI4 Lib "oleaut32" (lIn As Long, ByRef dateOut As DATE) As HRESULT
 Declare Function VarDateFromI8 Lib "oleaut32" (i64In As Int64, ByRef dateOut As DATE) As HRESULT
 Declare Function VarDateFromR4 Lib "oleaut32" (fltIn As Single, ByRef dateOut As DATE) As HRESULT
@@ -236,5 +236,5 @@
 Declare Function VarDateFromDisp Lib "oleaut32" (pdispIn As *IDispatch, lcid As LCID, ByRef dateOut As DATE) As HRESULT
 Declare Function VarDateFromBool Lib "oleaut32" (boolIn As VARIANT_BOOL, ByRef dateOut As DATE) As HRESULT
-Declare Function VarDateFromI1 Lib "oleaut32" (cIn As CHAR, ByRef dateOut As DATE) As HRESULT
+Declare Function VarDateFromI1 Lib "oleaut32" (cIn As SByte, ByRef dateOut As DATE) As HRESULT
 Declare Function VarDateFromUI2 Lib "oleaut32" (uiIn As Word, ByRef dateOut As DATE) As HRESULT
 Declare Function VarDateFromUI4 Lib "oleaut32" (ulIn As DWord, ByRef dateOut As DATE) As HRESULT
@@ -244,5 +244,5 @@
 Declare Function VarCyFromUI1 Lib "oleaut32" (bIn As Byte, ByRef cyOut As CY) As HRESULT
 Declare Function VarCyFromI2 Lib "oleaut32" (sIn As Integer, ByRef cyOut As CY) As HRESULT
-Declare Function VarCyFromI4 Lib "oleaut32" (lIn As LONG, ByRef cyOut As CY) As HRESULT
+Declare Function VarCyFromI4 Lib "oleaut32" (lIn As Long, ByRef cyOut As CY) As HRESULT
 Declare Function VarCyFromI8 Lib "oleaut32" (i64In As Int64, ByRef cyOut As CY) As HRESULT
 Declare Function VarCyFromR4 Lib "oleaut32" (fltIn As Single, ByRef cyOut As CY) As HRESULT
@@ -252,5 +252,5 @@
 Declare Function VarCyFromDisp Lib "oleaut32" (pdispIn As *IDispatch, lcid As LCID, ByRef cyOut As CY) As HRESULT
 Declare Function VarCyFromBool Lib "oleaut32" (boolIn As VARIANT_BOOL, ByRef cyOut As CY) As HRESULT
-Declare Function VarCyFromI1 Lib "oleaut32" (cIn As CHAR, ByRef cyOut As CY) As HRESULT
+Declare Function VarCyFromI1 Lib "oleaut32" (cIn As SByte, ByRef cyOut As CY) As HRESULT
 Declare Function VarCyFromUI2 Lib "oleaut32" (uiIn As Word, ByRef cyOut As CY) As HRESULT
 Declare Function VarCyFromUI4 Lib "oleaut32" (ulIn As DWord, ByRef cyOut As CY) As HRESULT
@@ -260,5 +260,5 @@
 Declare Function VarBstrFromUI1 Lib "oleaut32" (bIn As Byte, lcid As LCID, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
 Declare Function VarBstrFromI2 Lib "oleaut32" (sIn As Integer, lcid As LCID, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
-Declare Function VarBstrFromI4 Lib "oleaut32" (lIn As LONG, lcid As LCID, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
+Declare Function VarBstrFromI4 Lib "oleaut32" (lIn As Long, lcid As LCID, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
 Declare Function VarBstrFromI8 Lib "oleaut32" (i64In As Int64, lcid As LCID, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
 Declare Function VarBstrFromR4 Lib "oleaut32" (fltIn As Single, lcid As LCID, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
@@ -268,5 +268,5 @@
 Declare Function VarBstrFromDisp Lib "oleaut32" (pdispIn As *IDispatch, lcid As LCID, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
 Declare Function VarBstrFromBool Lib "oleaut32" (boolIn As VARIANT_BOOL, lcid As LCID, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
-Declare Function VarBstrFromI1 Lib "oleaut32" (cIn As CHAR, lcid As LCID, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
+Declare Function VarBstrFromI1 Lib "oleaut32" (cIn As SByte, lcid As LCID, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
 Declare Function VarBstrFromUI2 Lib "oleaut32" (uiIn As Word, lcid As LCID, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
 Declare Function VarBstrFromUI4 Lib "oleaut32" (ulIn As DWord, lcid As LCID, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
@@ -276,5 +276,5 @@
 Declare Function VarBoolFromUI1 Lib "oleaut32" (bIn As Byte, ByRef boolOut As VARIANT_BOOL) As HRESULT
 Declare Function VarBoolFromI2 Lib "oleaut32" (sIn As Integer, ByRef boolOut As VARIANT_BOOL) As HRESULT
-Declare Function VarBoolFromI4 Lib "oleaut32" (lIn As LONG, ByRef boolOut As VARIANT_BOOL) As HRESULT
+Declare Function VarBoolFromI4 Lib "oleaut32" (lIn As Long, ByRef boolOut As VARIANT_BOOL) As HRESULT
 Declare Function VarBoolFromI8 Lib "oleaut32" (i64In As Int64, ByRef boolOut As VARIANT_BOOL) As HRESULT
 Declare Function VarBoolFromR4 Lib "oleaut32" (fltIn As Single, ByRef boolOut As VARIANT_BOOL) As HRESULT
@@ -284,5 +284,5 @@
 Declare Function VarBoolFromStr Lib "oleaut32" (strIn As *OLECHAR, lcid As LCID, dwFlags As DWord, ByRef boolOut As VARIANT_BOOL) As HRESULT
 Declare Function VarBoolFromDisp Lib "oleaut32" (pdispIn As *IDispatch, lcid As LCID, ByRef boolOut As VARIANT_BOOL) As HRESULT
-Declare Function VarBoolFromI1 Lib "oleaut32" (cIn As CHAR, ByRef boolOut As VARIANT_BOOL) As HRESULT
+Declare Function VarBoolFromI1 Lib "oleaut32" (cIn As SByte, ByRef boolOut As VARIANT_BOOL) As HRESULT
 Declare Function VarBoolFromUI2 Lib "oleaut32" (uiIn As Word, ByRef boolOut As VARIANT_BOOL) As HRESULT
 Declare Function VarBoolFromUI4 Lib "oleaut32" (ulIn As DWord, ByRef boolOut As VARIANT_BOOL) As HRESULT
@@ -291,5 +291,5 @@
 
 Declare Function VarI1FromI2 Lib "oleaut32" (sIn As Integer, ByRef cOut As Char) As HRESULT
-Declare Function VarI1FromI4 Lib "oleaut32" (lIn As LONG, ByRef cOut As Char) As HRESULT
+Declare Function VarI1FromI4 Lib "oleaut32" (lIn As Long, ByRef cOut As Char) As HRESULT
 Declare Function VarI1FromI8 Lib "oleaut32" (i64In As Int64, ByRef cOut As Char) As HRESULT
 Declare Function VarI1FromR4 Lib "oleaut32" (fltIn As Single, ByRef cOut As Char) As HRESULT
@@ -300,5 +300,5 @@
 Declare Function VarI1FromDisp Lib "oleaut32" (pdispIn As *IDispatch, lcid As LCID, ByRef cOut As Char) As HRESULT
 Declare Function VarI1FromBool Lib "oleaut32" (boolIn As VARIANT_BOOL, ByRef cOut As Char) As HRESULT
-Declare Function VarI1FromI1 Lib "oleaut32" (cIn As CHAR, ByRef cOut As Char) As HRESULT
+Declare Function VarI1FromI1 Lib "oleaut32" (cIn As SByte, ByRef cOut As Char) As HRESULT
 Declare Function VarI1FromUI2 Lib "oleaut32" (uiIn As Word, ByRef cOut As Char) As HRESULT
 Declare Function VarI1FromUI4 Lib "oleaut32" (ulIn As DWord, ByRef cOut As Char) As HRESULT
@@ -308,5 +308,5 @@
 Declare Function VarUI2FromUI1 Lib "oleaut32" (bIn As Byte, ByRef uiOut As Word) As HRESULT
 Declare Function VarUI2FromI2 Lib "oleaut32" (uiIn As Integer, ByRef uiOut As Word) As HRESULT
-Declare Function VarUI2FromI4 Lib "oleaut32" (lIn As LONG, ByRef uiOut As Word) As HRESULT
+Declare Function VarUI2FromI4 Lib "oleaut32" (lIn As Long, ByRef uiOut As Word) As HRESULT
 Declare Function VarUI2FromI8 Lib "oleaut32" (i64In As Int64, ByRef uiOut As Word) As HRESULT
 Declare Function VarUI2FromR4 Lib "oleaut32" (fltIn As Single, ByRef uiOut As Word) As HRESULT
@@ -317,5 +317,5 @@
 Declare Function VarUI2FromDisp Lib "oleaut32" (pdispIn As *IDispatch, lcid As LCID, ByRef uiOut As Word) As HRESULT
 Declare Function VarUI2FromBool Lib "oleaut32" (boolIn As VARIANT_BOOL, ByRef uiOut As Word) As HRESULT
-Declare Function VarUI2FromI1 Lib "oleaut32" (cIn As CHAR, ByRef uiOut As Word) As HRESULT
+Declare Function VarUI2FromI1 Lib "oleaut32" (cIn As SByte, ByRef uiOut As Word) As HRESULT
 Declare Function VarUI2FromUI4 Lib "oleaut32" (ulIn As DWord, ByRef uiOut As Word) As HRESULT
 Declare Function VarUI2FromUI8 Lib "oleaut32" (i64In As QWord, ByRef uiOut As Word) As HRESULT
@@ -324,5 +324,5 @@
 Declare Function VarUI4FromUI1 Lib "oleaut32" (bIn As Byte, ByRef ulOut As DWord) As HRESULT
 Declare Function VarUI4FromI2 Lib "oleaut32" (uiIn As Integer, ByRef ulOut As DWord) As HRESULT
-Declare Function VarUI4FromI4 Lib "oleaut32" (lIn As LONG, ByRef ulOut As DWord) As HRESULT
+Declare Function VarUI4FromI4 Lib "oleaut32" (lIn As Long, ByRef ulOut As DWord) As HRESULT
 Declare Function VarUI4FromI8 Lib "oleaut32" (i64In As Int64, ByRef lOut As DWord) As HRESULT
 Declare Function VarUI4FromR4 Lib "oleaut32" (fltIn As Single, ByRef ulOut As DWord) As HRESULT
@@ -333,5 +333,5 @@
 Declare Function VarUI4FromDisp Lib "oleaut32" (pdispIn As *IDispatch, lcid As LCID, ByRef ulOut As DWord) As HRESULT
 Declare Function VarUI4FromBool Lib "oleaut32" (boolIn As VARIANT_BOOL, ByRef ulOut As DWord) As HRESULT
-Declare Function VarUI4FromI1 Lib "oleaut32" (cIn As CHAR, ByRef ulOut As DWord) As HRESULT
+Declare Function VarUI4FromI1 Lib "oleaut32" (cIn As SByte, ByRef ulOut As DWord) As HRESULT
 Declare Function VarUI4FromUI2 Lib "oleaut32" (uiIn As Word, ByRef ulOut As DWord) As HRESULT
 Declare Function VarUI4FromUI8 Lib "oleaut32" (ui64In As QWord, ByRef lOut As DWord) As HRESULT
@@ -340,5 +340,5 @@
 Declare Function VarUI8FromUI1 Lib "oleaut32" (bIn As Byte, ByRef i64Out As QWord) As HRESULT
 Declare Function VarUI8FromI2 Lib "oleaut32" (sIn As Integer, ByRef i64Out As QWord) As HRESULT
-Declare Function VarUI8FromI4 Lib "oleaut32" (lIn As LONG, ByRef i64Out As QWord) As HRESULT
+Declare Function VarUI8FromI4 Lib "oleaut32" (lIn As Long, ByRef i64Out As QWord) As HRESULT
 Declare Function VarUI8FromI8 Lib "oleaut32" (ui64In As Int64, ByRef i64Out As QWord) As HRESULT
 Declare Function VarUI8FromR4 Lib "oleaut32" (fltIn As Single, ByRef i64Out As QWord) As HRESULT
@@ -349,5 +349,5 @@
 Declare Function VarUI8FromDisp Lib "oleaut32" (pdispIn As *IDispatch, lcid As LCID, ByRef i64Out As QWord) As HRESULT
 Declare Function VarUI8FromBool Lib "oleaut32" (boolIn As VARIANT_BOOL, ByRef i64Out As QWord) As HRESULT
-Declare Function VarUI8FromI1 Lib "oleaut32" (cIn As CHAR, ByRef i64Out As QWord) As HRESULT
+Declare Function VarUI8FromI1 Lib "oleaut32" (cIn As SByte, ByRef i64Out As QWord) As HRESULT
 Declare Function VarUI8FromUI2 Lib "oleaut32" (uiIn As Word, ByRef i64Out As QWord) As HRESULT
 Declare Function VarUI8FromUI4 Lib "oleaut32" (ulIn As DWord, ByRef i64Out As QWord) As HRESULT
@@ -356,5 +356,5 @@
 Declare Function VarDecFromUI1 Lib "oleaut32" (bIn As Byte, ByRef decOut As DECIMAL) As HRESULT
 Declare Function VarDecFromI2 Lib "oleaut32" (uiIn As Integer, ByRef decOut As DECIMAL) As HRESULT
-Declare Function VarDecFromI4 Lib "oleaut32" (lIn As LONG, ByRef decOut As DECIMAL) As HRESULT
+Declare Function VarDecFromI4 Lib "oleaut32" (lIn As Long, ByRef decOut As DECIMAL) As HRESULT
 Declare Function VarDecFromI8 Lib "oleaut32" (i64In As Int64, ByRef decOut As DECIMAL) As HRESULT
 Declare Function VarDecFromR4 Lib "oleaut32" (fltIn As Single, ByRef decOut As DECIMAL) As HRESULT
@@ -365,36 +365,36 @@
 Declare Function VarDecFromDisp Lib "oleaut32" (pdispIn As *IDispatch, lcid As LCID, ByRef decOut As DECIMAL) As HRESULT
 Declare Function VarDecFromBool Lib "oleaut32" (boolIn As VARIANT_BOOL, ByRef decOut As DECIMAL) As HRESULT
-Declare Function VarDecFromI1 Lib "oleaut32" (cIn As CHAR, ByRef decOut As DECIMAL) As HRESULT
+Declare Function VarDecFromI1 Lib "oleaut32" (cIn As SByte, ByRef decOut As DECIMAL) As HRESULT
 Declare Function VarDecFromUI2 Lib "oleaut32" (uiIn As Word, ByRef decOut As DECIMAL) As HRESULT
 Declare Function VarDecFromUI4 Lib "oleaut32" (ulIn As DWord, ByRef decOut As DECIMAL) As HRESULT
 Declare Function VarDecFromUI8 Lib "oleaut32" (ui64In As QWord, ByRef decOut As DECIMAL) As HRESULT
 
-Declare Function VarUI1FromInt Lib "oleaut32" Alias "VarUI1FromI4" (lIn As LONG, ByRef bOut As Byte) As HRESULT
+Declare Function VarUI1FromInt Lib "oleaut32" Alias "VarUI1FromI4" (lIn As Long, ByRef bOut As Byte) As HRESULT
 Declare Function VarUI1FromUint Lib "oleaut32" Alias "VarUI1FromUI4" (ulIn As DWord, ByRef bOut As Byte) As HRESULT
-Declare Function VarI2FromInt Lib "oleaut32" Alias "VarI2FromI4" (lIn As LONG, ByRef sOut As Integer) As HRESULT
+Declare Function VarI2FromInt Lib "oleaut32" Alias "VarI2FromI4" (lIn As Long, ByRef sOut As Integer) As HRESULT
 Declare Function VarI2FromUint Lib "oleaut32" Alias "VarI2FromUI4" (ulIn As DWord, ByRef sOut As Integer) As HRESULT
 Declare Function VarI4FromUint Lib "oleaut32" Alias "VarI4FromUI4" (ulIn As DWord, ByRef lOut As Long) As HRESULT
-Declare Function VarI8FromInt Lib "oleaut32" Alias "VarI8FromI4" (lIn As LONG, ByRef i64Out As Int64) As HRESULT
+Declare Function VarI8FromInt Lib "oleaut32" Alias "VarI8FromI4" (lIn As Long, ByRef i64Out As Int64) As HRESULT
 Declare Function VarI8FromUint Lib "oleaut32" Alias "VarI8FromUI4" (ulIn As DWord, ByRef i64Out As Int64) As HRESULT
-Declare Function VarR4FromInt Lib "oleaut32" Alias "VarR4FromI4" (lIn As LONG, ByRef fltOut As Single) As HRESULT
+Declare Function VarR4FromInt Lib "oleaut32" Alias "VarR4FromI4" (lIn As Long, ByRef fltOut As Single) As HRESULT
 Declare Function VarR4FromUint Lib "oleaut32" Alias "VarR4FromUI4" (ulIn As DWord, ByRef fltOut As Single) As HRESULT
-Declare Function VarR8FromInt Lib "oleaut32" Alias "VarR8FromI4" (lIn As LONG, ByRef dblOut As Double) As HRESULT
+Declare Function VarR8FromInt Lib "oleaut32" Alias "VarR8FromI4" (lIn As Long, ByRef dblOut As Double) As HRESULT
 Declare Function VarR8FromUint Lib "oleaut32" Alias "VarR8FromUI4" (ulIn As DWord, ByRef dblOut As Double) As HRESULT
-Declare Function VarDateFromInt Lib "oleaut32" Alias "VarDateFromI4" (lIn As LONG, ByRef dateOut As DATE) As HRESULT
+Declare Function VarDateFromInt Lib "oleaut32" Alias "VarDateFromI4" (lIn As Long, ByRef dateOut As DATE) As HRESULT
 Declare Function VarDateFromUint Lib "oleaut32" Alias "VarDateFromUI4" (ulIn As DWord, ByRef dateOut As DATE) As HRESULT
-Declare Function VarCyFromInt Lib "oleaut32" Alias "VarCyFromI4" (lIn As LONG, ByRef cyOut As CY) As HRESULT
+Declare Function VarCyFromInt Lib "oleaut32" Alias "VarCyFromI4" (lIn As Long, ByRef cyOut As CY) As HRESULT
 Declare Function VarCyFromUint Lib "oleaut32" Alias "VarCyFromUI4" (ulIn As DWord, ByRef cyOut As CY) As HRESULT
-Declare Function VarBstrFromInt Lib "oleaut32" Alias "VarBstrFromI4" (lIn As LONG, lcid As LCID, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
+Declare Function VarBstrFromInt Lib "oleaut32" Alias "VarBstrFromI4" (lIn As Long, lcid As LCID, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
 Declare Function VarBstrFromUint Lib "oleaut32" Alias "VarBstrFromUI4" (ulIn As DWord, lcid As LCID, dwFlags As DWord, ByRef bstrOut As BSTR) As HRESULT
-Declare Function VarBoolFromInt Lib "oleaut32" Alias "VarBoolFromI4" (lIn As LONG, ByRef boolOut As VARIANT_BOOL) As HRESULT
+Declare Function VarBoolFromInt Lib "oleaut32" Alias "VarBoolFromI4" (lIn As Long, ByRef boolOut As VARIANT_BOOL) As HRESULT
 Declare Function VarBoolFromUint Lib "oleaut32" Alias "VarBoolFromUI4" (ulIn As DWord, ByRef boolOut As VARIANT_BOOL) As HRESULT
-Declare Function VarI1FromInt Lib "oleaut32" Alias "VarI1FromI4" (lIn As LONG, ByRef cOut As Char) As HRESULT
+Declare Function VarI1FromInt Lib "oleaut32" Alias "VarI1FromI4" (lIn As Long, ByRef cOut As Char) As HRESULT
 Declare Function VarI1FromUint Lib "oleaut32" Alias "VarI1FromUI4" (ulIn As DWord, ByRef cOut As Char) As HRESULT
-Declare Function VarUI2FromInt Lib "oleaut32" Alias "VarUI2FromI4" (lIn As LONG, ByRef uiOut As Word) As HRESULT
+Declare Function VarUI2FromInt Lib "oleaut32" Alias "VarUI2FromI4" (lIn As Long, ByRef uiOut As Word) As HRESULT
 Declare Function VarUI2FromUint Lib "oleaut32" Alias "VarUI2FromUI4" (ulIn As DWord, ByRef uiOut As Word) As HRESULT
-Declare Function VarUI4FromInt Lib "oleaut32" Alias "VarUI4FromI4" (lIn As LONG, ByRef ulOut As DWord) As HRESULT
-Declare Function VarUI8FromInt Lib "oleaut32" Alias "VarUI8FromI4" (lIn As LONG, ByRef i64Out As QWord) As HRESULT
+Declare Function VarUI4FromInt Lib "oleaut32" Alias "VarUI4FromI4" (lIn As Long, ByRef ulOut As DWord) As HRESULT
+Declare Function VarUI8FromInt Lib "oleaut32" Alias "VarUI8FromI4" (lIn As Long, ByRef i64Out As QWord) As HRESULT
 Declare Function VarUI8FromUint Lib "oleaut32" Alias "VarUI8FromUI4" (ulIn As DWord, ByRef i64Out As QWord) As HRESULT
-Declare Function VarDecFromInt Lib "oleaut32" Alias "VarDecFromI4" (lIn As LONG, ByRef decOut As DECIMAL) As HRESULT
+Declare Function VarDecFromInt Lib "oleaut32" Alias "VarDecFromI4" (lIn As Long, ByRef decOut As DECIMAL) As HRESULT
 
 Declare Function VarIntFromUI1 Lib "oleaut32" Alias "VarI4FromUI1" (bIn As Byte, ByRef lOut As Long) As HRESULT
@@ -408,5 +408,5 @@
 Declare Function VarIntFromDisp Lib "oleaut32" Alias "VarI4FromDisp" (pdispIn As *IDispatch, lcid As LCID, ByRef lOut As Long) As HRESULT
 Declare Function VarIntFromBool Lib "oleaut32" Alias "VarI4FromBool" (boolIn As VARIANT_BOOL, ByRef lOut As Long) As HRESULT
-Declare Function VarIntFromI1 Lib "oleaut32" Alias "VarI4FromI1" (cIn As CHAR, ByRef lOut As Long) As HRESULT
+Declare Function VarIntFromI1 Lib "oleaut32" Alias "VarI4FromI1" (cIn As SByte, ByRef lOut As Long) As HRESULT
 Declare Function VarIntFromUI2 Lib "oleaut32" Alias "VarI4FromUI2" (uiIn As Word, ByRef lOut As Long) As HRESULT
 Declare Function VarIntFromUI4 Lib "oleaut32" Alias "VarI4FromUI4" (ulIn As DWord, ByRef lOut As Long) As HRESULT
@@ -416,5 +416,5 @@
 Declare Function VarIntFromUint Lib "oleaut32" Alias "VarI4FromUI4" (ulIn As DWord, ByRef lOut As Long) As HRESULT
 Declare Function VarUintFromI2 Lib "oleaut32" Alias "VarUI4FromI2" (uiIn As Integer, ByRef ulOut As DWord) As HRESULT
-Declare Function VarUintFromI4 Lib "oleaut32" Alias "VarUI4FromI4" (lIn As LONG, ByRef ulOut As DWord) As HRESULT
+Declare Function VarUintFromI4 Lib "oleaut32" Alias "VarUI4FromI4" (lIn As Long, ByRef ulOut As DWord) As HRESULT
 Declare Function VarUintFromI8 Lib "oleaut32" Alias "VarUI4FromI8" (i64In As Int64, ByRef lOut As DWord) As HRESULT
 Declare Function VarUintFromR4 Lib "oleaut32" Alias "VarUI4FromR4" (fltIn As Single, ByRef ulOut As DWord) As HRESULT
@@ -425,9 +425,9 @@
 Declare Function VarUintFromDisp Lib "oleaut32" Alias "VarUI4FromDisp" (pdispIn As *IDispatch, lcid As LCID, ByRef ulOut As DWord) As HRESULT
 Declare Function VarUintFromBool Lib "oleaut32" Alias "VarUI4FromBool" (boolIn As VARIANT_BOOL, ByRef ulOut As DWord) As HRESULT
-Declare Function VarUintFromI1 Lib "oleaut32" Alias "VarUI4FromI1" (cIn As CHAR, ByRef ulOut As DWord) As HRESULT
+Declare Function VarUintFromI1 Lib "oleaut32" Alias "VarUI4FromI1" (cIn As SByte, ByRef ulOut As DWord) As HRESULT
 Declare Function VarUintFromUI2 Lib "oleaut32" Alias "VarUI4FromUI2" (uiIn As Word, ByRef ulOut As DWord) As HRESULT
 Declare Function VarUintFromUI8 Lib "oleaut32" Alias "VarUI4FromUI8" (ui64In As QWord, ByRef lOut As DWord) As HRESULT
 Declare Function VarUintFromDec Lib "oleaut32" Alias "VarUI4FromDec" (ByRef decIn As DECIMAL, ByRef ulOut As DWord) As HRESULT
-Declare Function VarUintFromInt Lib "oleaut32" Alias "VarUI4FromI4" (lIn As LONG, ByRef ulOut As DWord) As HRESULT
+Declare Function VarUintFromInt Lib "oleaut32" Alias "VarUI4FromI4" (lIn As Long, ByRef ulOut As DWord) As HRESULT
 
 Sub VarI4FromInt(iIn As Long, ByRef lOut As Long)
@@ -566,6 +566,6 @@
 End Type
 
-Declare Function VarDateFromUdate Lib "oleaut32" (udateIn As UDATE, dwFlags As DWord, ByRef dateOut As DATE) As HRESULT
-Declare Function VarDateFromUdateEx Lib "oleaut32" (udateIn As UDATE, lcid As LCID, dwFlags As DWord, ByRef dateOut As DATE) As HRESULT
+Declare Function VarDateFromUdate Lib "oleaut32" (ByRef udateIn As UDATE, dwFlags As DWord, ByRef dateOut As DATE) As HRESULT
+Declare Function VarDateFromUdateEx Lib "oleaut32" (ByRef udateIn As UDATE, lcid As LCID, dwFlags As DWord, ByRef dateOut As DATE) As HRESULT
 Declare Function VarUdateFromDate Lib "oleaut32" (dateIn As DATE, dwFlags As DWord, ByRef udateOut As UDATE) As HRESULT
 
@@ -586,5 +586,5 @@
 
 ' ITypeLib
-TypeDef PTYPELIB = VoidPtr '*ITypeLib
+TypeDef PTYPELIB = *ITypeLib
 
 ' ITypeInfo
Index: /Include/api_imm.sbp
===================================================================
--- /Include/api_imm.sbp	(revision 191)
+++ /Include/api_imm.sbp	(revision 192)
@@ -115,6 +115,4 @@
 TypeDef LPSTYLEBUF = LPSTYLEBUFA
 #endif
-
-'#if (WINVER >= 0x040A)
 
 Const IMEMENUITEM_STRING_SIZE = 80
@@ -221,10 +219,10 @@
 #endif
 
-Declare Function ImmSetCompositionStringA Lib "imm32" (himc As HIMC, dwIndex As DWord, lpComp As VoidPtr, dwCompLen As DWord, lpRead As VoidPtr, dwReadLen As DWord ) As BOOL
-Declare Function ImmSetCompositionStringW Lib "imm32" (himc As HIMC, dwIndex As DWord, lpComp As VoidPtr, dwCompLen As DWord, lpRead As VoidPtr, dwReadLen As DWord ) As BOOL
-#ifdef UNICODE
-Declare Function ImmSetCompositionString Lib "imm32" Alias "ImmSetCompositionStringW" (himc As HIMC, dwIndex As DWord, lpComp As VoidPtr, dwCompLen As DWord, lpRead As VoidPtr, dwReadLen As DWord ) As BOOL
-#else
-Declare Function ImmSetCompositionString Lib "imm32" Alias "ImmSetCompositionStringA" (himc As HIMC, dwIndex As DWord, lpComp As VoidPtr, dwCompLen As DWord, lpRead As VoidPtr, dwReadLen As DWord ) As BOOL
+Declare Function ImmSetCompositionStringA Lib "imm32" (himc As HIMC, dwIndex As DWord, lpComp As VoidPtr, dwCompLen As DWord, lpRead As VoidPtr, dwReadLen As DWord) As BOOL
+Declare Function ImmSetCompositionStringW Lib "imm32" (himc As HIMC, dwIndex As DWord, lpComp As VoidPtr, dwCompLen As DWord, lpRead As VoidPtr, dwReadLen As DWord) As BOOL
+#ifdef UNICODE
+Declare Function ImmSetCompositionString Lib "imm32" Alias "ImmSetCompositionStringW" (himc As HIMC, dwIndex As DWord, lpComp As VoidPtr, dwCompLen As DWord, lpRead As VoidPtr, dwReadLen As DWord) As BOOL
+#else
+Declare Function ImmSetCompositionString Lib "imm32" Alias "ImmSetCompositionStringA" (himc As HIMC, dwIndex As DWord, lpComp As VoidPtr, dwCompLen As DWord, lpRead As VoidPtr, dwReadLen As DWord) As BOOL
 #endif
 
@@ -245,19 +243,19 @@
 #endif
 
-Declare Function ImmGetGuideLineA(himc As HIMC, dwIndex As DWord, lpBuf As LPSTR, dwBufLen As DWord) As DWord
-Declare Function ImmGetGuideLineW(himc As HIMC, dwIndex As DWord, lpBuf As LPWSTR, dwBufLen As DWord) As DWord
-#ifdef UNICODE
-Declare Function ImmGetGuideLine Alias "ImmGetGuideLineW" (himc As HIMC, dwIndex As DWord, lpBuf As LPWSTR, dwBufLen As DWord) As DWord
-#else
-Declare Function ImmGetGuideLine Alias "ImmGetGuideLineA" (himc As HIMC, dwIndex As DWord, lpBuf As LPSTR, dwBufLen As DWord) As DWord
-#endif
-
-Declare Function ImmGetConversionStatus(himc As HIMC, ByRef fdwConversion As DWord, ByRef fdwSentence As DWord) As BOOL
-Declare Function ImmSetConversionStatus(himc As HIMC, fdwConversion As DWord, fdwSentence As DWord) As BOOL
-Declare Function ImmGetOpenStatus(himc As HIMC) As BOOL
-Declare Function ImmSetOpenStatus(himc As HIMC, fOpen As BOOL) As BOOL
+Declare Function ImmGetGuideLineA Lib "imm32" (himc As HIMC, dwIndex As DWord, lpBuf As LPSTR, dwBufLen As DWord) As DWord
+Declare Function ImmGetGuideLineW Lib "imm32" (himc As HIMC, dwIndex As DWord, lpBuf As LPWSTR, dwBufLen As DWord) As DWord
+#ifdef UNICODE
+Declare Function ImmGetGuideLine Lib "imm32"  Alias "ImmGetGuideLineW" (himc As HIMC, dwIndex As DWord, lpBuf As LPWSTR, dwBufLen As DWord) As DWord
+#else
+Declare Function ImmGetGuideLine Lib "imm32"  Alias "ImmGetGuideLineA" (himc As HIMC, dwIndex As DWord, lpBuf As LPSTR, dwBufLen As DWord) As DWord
+#endif
+
+Declare Function ImmGetConversionStatus Lib "imm32" (himc As HIMC, ByRef fdwConversion As DWord, ByRef fdwSentence As DWord) As BOOL
+Declare Function ImmSetConversionStatus Lib "imm32" (himc As HIMC, fdwConversion As DWord, fdwSentence As DWord) As BOOL
+Declare Function ImmGetOpenStatus Lib "imm32" (himc As HIMC) As BOOL
+Declare Function ImmSetOpenStatus Lib "imm32" (himc As HIMC, fOpen As BOOL) As BOOL
 
 #ifdef _INC_GDI '_WINGDI_
-#ifndef NOGID
+#ifndef NOGDI
 Declare Function ImmGetCompositionFontA Lib "imm32" (hIMC As HIMC, ByRef lf As LOGFONTA) As BOOL
 Declare Function ImmGetCompositionFontW Lib "imm32" (hIMC As HIMC, ByRef lf As LOGFONTW) As BOOL
@@ -275,6 +273,7 @@
 Declare Function ImmSetCompositionFont Lib "imm32" Alias "ImmSetCompositionFontA" (hIMC As HIMC, ByRef lf As LOGFONT) As Long
 #endif
-#endif 'NOGID
+#endif 'NOGDI
 #endif '_INC_GDI
+#endif
 
 Declare Function ImmConfigureIMEA Lib "imm32" (hkl As HKL, hwnd As HWND, dwMode As DWord, lpData As VoidPtr) As BOOL
@@ -368,5 +367,5 @@
 Declare Function ImmGetImeMenuItems Lib "imm32" Alias "ImmGetImeMenuItemsA" (himc As HIMC, dwFlags As DWord, dwType As DWord, ByRef ImeParentMenu As IMEMENUITEMINFOA, lpImeMenu As LPIMEMENUITEMINFOA, dwSoze As DWord) As DWord
 #endif
-Declare Function ImmDisableTextFrameService(idThread As DWord) As BOOL
+Declare Function ImmDisableTextFrameService Lib "imm32"(idThread As DWord) As BOOL
 
 ' wParam for WM_IME_CONTROL
@@ -705,5 +704,4 @@
 Const SOFTKEYBOARD_TYPE_C1 = &h0002
 
-
 #endif '_IMM_SDK_DEFINED_
 
Index: /Include/basic/function.sbp
===================================================================
--- /Include/basic/function.sbp	(revision 191)
+++ /Include/basic/function.sbp	(revision 192)
@@ -555,5 +555,5 @@
 	'値が0の場合
 	If value = 0 Then
-		_System_FillChar(_System_ecvt_buffer, count, &H30)
+		_System_FillChar(_System_ecvt_buffer, count As SIZE_T, &H30 As StrChar)
 		_System_ecvt_buffer[count] = 0
 		dec = 0
Index: /Include/basic/prompt.sbp
===================================================================
--- /Include/basic/prompt.sbp	(revision 191)
+++ /Include/basic/prompt.sbp	(revision 192)
@@ -494,6 +494,6 @@
 
 	'Create Prompt Window
-	_PromptSys_hWnd = CreateWindowEx(WS_EX_CLIENTEDGE, atom As ULONG_PTR As PCTSTR, "BASIC PROMPT",
-		WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
+	_PromptSys_hWnd = CreateWindowEx(WS_EX_CLIENTEDGE, atom As ULONG_PTR As LPCTSTR, "BASIC PROMPT", _
+		WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, _
 		0, 0, wcl.hInstance, 0)
 	ShowWindow(_PromptSys_hWnd, SW_SHOW)
@@ -540,5 +540,5 @@
 		For i = 0 To 100
 			With _PromptSys_TextLine[i]
-				.Text[0] = 0 '_System_FillChar(_PromptSys_TextLine[i].Text, -1 As Char, 0)
+				.Text[0] = 0 '_System_FillChar(_PromptSys_TextLine[i].Text, -1 As StrChar, 0)
 				.Length = 0
 			End With
@@ -646,5 +646,5 @@
 	Dim i = _PromptSys_TextLine[y].Length
 	If i < x Then
-		_System_FillChar(VarPtr(_PromptSys_TextLine[y].Text[i]), x - i, &h20) 'Asc(" ")
+		_System_FillChar(VarPtr(_PromptSys_TextLine[y].Text[i]), x - i, &h20 As StrChar) 'Asc(" ")
 		Dim i2 As Long
 		For i2 = i To ELM(x)
Index: /Include/com/bstring.ab
===================================================================
--- /Include/com/bstring.ab	(revision 191)
+++ /Include/com/bstring.ab	(revision 192)
@@ -80,5 +80,5 @@
 	End Sub
 
-	Sub Attach(bstr As BSTR)
+	Sub Attach(ByRef bstr As BSTR)
 		Clear()
 		BString.Move(bs, bstr)
Index: /Include/com/currency.ab
===================================================================
--- /Include/com/currency.ab	(revision 192)
+++ /Include/com/currency.ab	(revision 192)
@@ -0,0 +1,72 @@
+' com/currency.ab
+
+Class Currency
+Public
+	Const Function Operator +() As Currency
+		Return New Currency(This)
+	End Function
+
+	Const Function Operator -() As Currency
+		Dim ret = New Currency
+		VarCyNeg(This.cy, ret.cy)
+		Return ret
+	End Function
+
+	Const Function Operator *(y As Currency) As Currency
+		Dim ret = New Currency
+		VarCyMul(This.cy, y.cy, ret.cy)
+		Return ret
+	End Function
+
+	Const Function Operator *(y As Long) As Currency
+		Dim ret = New Currency
+		VarCyMulI4(This.cy, y, ret.cy)
+		Return ret
+	End Function
+
+	Const Function Operator *(y As Int64) As Currency
+		Dim ret = New Currency
+		VarCyMulI8(This.cy, y, ret.cy)
+		Return ret
+	End Function
+
+	Const Function Operator /(y As Variant) As Double
+		Dim vx = New Variant(This)
+		Dim ret= vx / y
+		Return ret.ValR4
+	End Function
+
+	Const Function Operator /(y As Currency) As Double
+		Return This / New Varinat(y)
+	End Function
+
+	Const Function Operator +(y As Currency) As Currency
+		Dim ret = New Currency
+		VarCyAdd(This.cy, y.cy, ret.cy)
+		Return ret
+	End Function
+
+	Const Function Operator -(y As Currency) As Currency
+		Dim ret = New Currency
+		VarCySub(This.cy, y.cy, ret.cy)
+		Return ret
+	End Function
+
+	Const Function Abs() As Currency
+		VarCyAbs(This.cy, Abs.cy)
+	End Function
+
+	Const Function Fix() As Currency
+		VarCyFix(This.cy, Fix.cy)
+	End Function
+
+	Const Function Int() As Currency
+		VarCyInt(This.cy, Int.cy)
+	End Function
+
+	Const Function Round(c = 0 As Long) As Currency
+		VarCyRound(This.cy, c, Round.cy)
+	End Function
+Private
+	cy As CY
+End Class
Index: /Include/com/index.ab
===================================================================
--- /Include/com/index.ab	(revision 191)
+++ /Include/com/index.ab	(revision 192)
@@ -2,2 +2,5 @@
 
 #require <com/bstring.ab>
+#require <com/variant.ab>
+#require <com/vbojbect.ab>
+#require <com/currency.ab>
Index: /Include/com/variant.ab
===================================================================
--- /Include/com/variant.ab	(revision 191)
+++ /Include/com/variant.ab	(revision 192)
@@ -20,5 +20,5 @@
 	End Sub
 
-	Sub Variant(v As VARIANT)
+	Sub Variant(ByRef y As VARIANT)
 		VariantInit(v)
 		VariantCopy(v, y)
@@ -132,7 +132,10 @@
 	End Sub
 
-	Sub Assign(from As VARIANT)
-		Clear()
+	Sub Assign(ByRef from As VARIANT)
 		Variant.Copy(v, from)
+	End Sub
+
+	Sub AssignInd(ByRef from As VARIANT)
+		VariantCopyInd(v, from)
 	End Sub
 
@@ -141,4 +144,8 @@
 	End Sub
 
+	Const Function Copy() As VARIANT
+		Variant.Copy(Copy, v)
+	End Function
+
 	Function Detach() As VARIANT
 		Variant.Move(Detach, v)
@@ -153,5 +160,9 @@
 	End Function
 
-	Function Operator -() As Variant
+	Const Function Operator +() As Variant
+		Return New Variant(This)
+	End Function
+
+	Const Function Operator -() As Variant
 		Dim ret As Variant
 		VarNeg(This.v, ret.v)
@@ -219,5 +230,5 @@
 	End Function
 
-	Function Operator Not() As Variant
+	Const Function Operator Not() As Variant
 		Dim ret As Variant
 		VarNot(This.v, ret.v)
@@ -237,5 +248,5 @@
 	End Function
 
-	Function Abs() As Variant
+	Const Function Abs() As Variant
 		Dim ret As Variant
 		VarAbs(This.v, ret.v)
@@ -243,5 +254,5 @@
 	End Function
 
-	Function Fix() As Variant
+	Const Function Fix() As Variant
 		Dim ret As Variant
 		VarFix(This.v, ret.v)
@@ -249,5 +260,5 @@
 	End Function
 
-	Function Int() As Variant
+	Const Function Int() As Variant
 		Dim ret As Variant
 		VarInt(This.v, ret.v)
@@ -255,5 +266,5 @@
 	End Function
 
-	Function Round(cDecimals As Long) As Variant
+	Const Function Round(cDecimals As Long) As Variant
 		Dim ret As Variant
 		VarRound(This.v, cDecimals, ret)
@@ -261,5 +272,5 @@
 	End Function
 
-	Function Round() As Variant
+	Const Function Round() As Variant
 		Return Round(0)
 	End Function
@@ -274,27 +285,55 @@
 
 	Const Function Operator ==(y As Variant) As Boolean
-		Return Compare(This, y) = VARCMP_EQ
+		Dim c = Compare(This, y)
+		If c = VARCMP_EQ Then
+			Return True
+		Else
+			Return False
+		End If
 	End Function
 
 	Const Function Operator <>(y As Variant) As Boolean
-		Return Compare(This, y) <> VARCMP_EQ
+		Dim c = Compare(This, y)
+		If c <> VARCMP_EQ Then
+			Return True
+		Else
+			Return False
+		End If
 	End Function
 
 	Const Function Operator <(y As Variant) As Boolean
-		Return Compare(This, y) = VARCMP_LT
-	End Function
-
-'	Const Function Operator >(y As Variant) As Boolean
-'		Return Compare(This, y) = VARCMP_GT
-'	End Function
-
+		Dim c = Compare(This, y)
+		If c = VARCMP_LT Then
+			Return True
+		Else
+			Return False
+		End If
+	End Function
+/*
+	Const Function Operator >(y As Variant) As Boolean
+		Dim c = Compare(This, y)
+		If c = VARCMP_GT Then
+			Return True
+		Else
+			Return False
+		End If
+	End Function
+*/
 	Const Function Operator <=(y As Variant) As Boolean
-		Dim result = Compare(This, y)
-		Return result = VARCMP_LT Or result = VARCMP_EQ
+		Dim c = Compare(This, y)
+		If result = VARCMP_LT Or result = VARCMP_EQ Then
+			Return True
+		Else
+			Return False
+		End If
 	End Function
 
 	Const Function Operator >=(y As Variant) As Boolean
-		Dim result = Compare(This, y)
-		Return result = VARCMP_GT Or result = VARCMP_EQ
+		Dim c = Compare(This, y)
+		If result = VARCMP_GT Or result = VARCMP_EQ Then
+			Return True
+		Else
+			Return False
+		End If
 	End Function
 
@@ -469,5 +508,5 @@
 	'ValDate
 
-	Const Function ValBStr() As BString
+	Const Function ValStr() As BString
 		Dim r As VARIANT
 		ChangeType(r, 0, VT_BSTR)
@@ -477,5 +516,5 @@
 	End Function
 
-	Sub ValBStr(x As BString)
+	Sub ValStr(x As BString)
 		Clear()
 		v.vt = VT_BSTR
@@ -497,6 +536,6 @@
 	Const Function ValObject() As VBObject
 		Dim r As VARIANT
-		ChangeType(r, 0, VT_DISPATH)
-		Dim o As VBOBject
+		ChangeType(r, 0, VT_DISPATCH)
+		Dim o As VBObject
 		o.Attach(GetPointer(VarPtr(r.val)) As *IDispatch)
 		Return o
@@ -517,4 +556,5 @@
 		Return VarPtr(v)
 	End Function
+
 Private
 	v As VARIANT
@@ -523,5 +563,5 @@
 		VariantCopy(dst, src)
 	End Sub
-		
+
 
 	Static Sub Move(ByRef dst As VARIANT, ByRef src As VARIANT)
Index: /Include/com/vbobject.ab
===================================================================
--- /Include/com/vbobject.ab	(revision 191)
+++ /Include/com/vbobject.ab	(revision 192)
@@ -12,13 +12,21 @@
 	End Sub
 
-	Sub VBObject(className As String)
-		VBObject(ToWCStr(className))
-	End Sub
-
-	Sub VBObject(className As PCWSTR)
+	Sub VBObject(className As String, pOuter As *IUnknown, clsContext As DWord)
+		VBObject(ToWCStr(className), pOuter, clsContext)
+	End Sub
+
+	Sub VBObject(className As PCSTR, pOuter As *IUnknown, clsContext As DWord)
+		VBObject(ToWCStr(className), pOuter, clsContext)
+	End Sub
+
+	Sub VBObject(className As PCWSTR, pOuter As *IUnknown, clsContext As DWord)
 		pdisp = 0
 		Dim clsid As CLSID
 		Dim hr = _System_CLSIDFromString(className, clsid)
-		Dim hr2 = CoCreateInstance(clsid, 0, CLSCTX_ALL, IID_IDispatch, pdisp)
+		VBObject(clsid, pOuter, clsContext)
+	End Sub
+
+	Sub VBObject(ByRef clsid As CLSID, pOuter As *IUnknown, clsContext As DWord)
+		Dim hr = CoCreateInstance(clsid, pOuter, clsContext, IID_IDispatch, pdisp)
 	End Sub
 
@@ -53,13 +61,9 @@
 
 	Function Equals(y As VBObject) As Boolean
-		Dim punkX = GetUnknown()
-		Dim punkY = y.GetUnknown()
-		Equals = (punkX == punkY)
-		punkX->Release()
-		punkY->Release()
+		Return _System_COMReferenceEquals(pdisp, y.pdisp)
 	End Function
 /*
 	Override Function GetHashCode() As Long
-		Dim punk = GetUnknown()
+		Dim punk = _System_GetUnknown(pdisp)
 		GetHashCode = _System_HashFromPtr(punk)
 		punk->Release()
@@ -79,5 +83,5 @@
 	End Sub
 
-	Function GetDispatch() As *IDispatch
+	Function Copy() As *IDispatch
 		VBObject.Copy(GetDispatch, pdisp)
 	End Function
@@ -88,7 +92,11 @@
 	End Sub
 
-	Sub Detach()
+	Function Detach() As *IDispatch
 		VBObject.Move(Detach, pdisp)
-	End Sub
+	End Function
+
+	Function Dispatch() As *IDispatch
+		Dispatch = pdisp
+	End Function
 Private
 	Function GetCaller(name As PCWSTR) As DispatchCaller
@@ -96,10 +104,4 @@
 		Dim hr = pdisp->GetIDsOfNames(GUID_NULL, VarPtr(name), 1, LOCALE_USER_DEFAULT, VarPtr(dispid))
 		Return New DispatchCaller(pdisp, dispid)
-	End Function
-
-	Function GetUnknown() As *IUnknown
-		If FAILDED(pdisp->QueryInterface(IID_Unknown, GetUnknown)) Then
-			GetUnknown = 0
-		End If
 	End Function
 
@@ -170,14 +172,5 @@
 
 	Sub Prop(ByRef arg As VARIANT)
-		Dim dispParams As DISPPARAMS
-		With dispParams
-			.rgvarg = VarPtr(arg)
-			.rgdispidNamedArgs = 0
-			.cArgs = 1
-			.cNamedArgs = 1
-		End With
-		Dim ret As VARIANT
-		Dim hr = pdisp->Invoke(dispid, GUID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYPUT, dispParams, ret, ByVal 0, 0)
-		Dispose()
+		setProp(arg, DISPATCH_PROPERTYPUT)
 	End Sub
 
@@ -187,14 +180,5 @@
 
 	Sub PropRef(ByRef arg As VARIANT)
-		Dim dispParams As DISPPARAMS
-		With dispParams
-			.rgvarg = 1
-			.rgdispidNamedArgs = 0
-			.cArgs = VarPtr(arg)
-			.cNamedArgs = 0
-		End With
-		Dim ret As VARIANT
-		Dim hr = pdisp->Invoke(dispid, GUID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYPUTREF, dispParams, ret, ByVal 0, 0)
-		Dispose()
+		setProp(arg, DISPATCH_PROPERTYPUTREF)
 	End Sub
 
@@ -228,13 +212,51 @@
 	Function Call(ByRef arg1 As Variant, ByRef arg2 As Variant) As Variant
 		Dim arg[1] As VARIANT
-		
+
 		Return Call(2, VarPtr(arg1) As *VARIANT)
 	End Function
 
 Private
+	Sub setProp(ByRef arg As VARIANT, callType As Word)
+		Dim dispidNamed = DISPID_PROPERTYPUT As DISPID
+		Dim dispParams As DISPPARAMS
+		With dispParams
+			.rgvarg = VarPtr(arg)
+			.rgdispidNamedArgs = VarPtr(dispidNamed)
+			.cArgs = 1
+			.cNamedArgs = 1
+		End With
+		Dim hr = pdisp->Invoke(dispid, GUID_NULL, LOCALE_USER_DEFAULT, callType, dispParams, ByVal 0, ByVal 0, 0)
+		Dispose()
+	End Sub
+
+
 	pdisp As *IDispatch
 	dispid As DISPID
 End Class
-/*
+
+Function CallByName(obj As VBObject, procName As String, callType As Word, cArgs As Long, args As *VARIANT) As Variant
+	Return CallByName(obj.Dispatch, ToWCStr(procName), callType, cArgs, args)
+End Function
+
+Function CallByName(obj As VBObject, procName As PCWSTR, callType As Word, cArgs As Long, args As *VARIANT) As Variant
+	Return CallByName(obj.Dispatch, procName, callType, cArgs, args)
+End Function
+
+Function CallByName(obj As *IDispatch, name As PCWSTR, callType As Word, cArgs As Long, args As *VARIANT) As Variant
+	Dim dispid As DISPID
+	Dim hr = obj->GetIDsOfNames(GUID_NULL, VarPtr(name), 1, LOCALE_USER_DEFAULT, VarPtr(dispid))
+	Dim dispParams As DISPPARAMS
+	With dispParams
+		.rgvarg = args
+		.rgdispidNamedArgs = 0
+		.cArgs = cArgs
+		.cNamedArgs = 0
+	End With
+	Dim ret As VARIANT
+	hr = obj->Invoke(dispid, GUID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, dispParams, ret, ByVal 0, 0)
+	CallByName.Attach(ret)
+	Return CallByName
+End Function
+
 Function CreateObject(className As PCWSTR) As VBObject
 	Return New VBObject(className)
@@ -244,5 +266,5 @@
 	Return New VBObject(ToWCStr(className))
 End Function
-
+/*
 #ifdef _WIN32_DCOM
 Function CreateObject(className As PCWSTR, serverName As PCWSTR) As VBObject
@@ -250,10 +272,10 @@
 	Dim si As COSERVERINFO
 	Dim context As DWord
-    If /*Server = 0 OrElse* / Server[0] = 0 Then
-        context = CLSCTX_SERVER
-    Else
-        context = CLSCTX_REMOTE_SERVER
-        si.pwszName = serverName
-    End If
+	If /*Server = 0 OrElse* / Server[0] = 0 Then
+		context = CLSCTX_SERVER
+	Else
+		context = CLSCTX_REMOTE_SERVER
+		si.pwszName = serverName
+	End If
 
 	Dim hr = _System_CLSIDFromString(className, clsid)
@@ -270,5 +292,5 @@
 		Return Nothing
 	End If
-End Function	
+End Function
 
 Function CreateObject(className As String, serverName As String) As VBObject
@@ -279,9 +301,33 @@
 Function _System_CLSIDFromString(pwString As PCWSTR, ByRef guid As GUID) As HRESULT
 	If pwString[0] = &h007b As WCHAR Then
-        ' 1文字目が { ならクラスIDの文字列表現と見なしCLSIDFromStringで変換。
-        _System_CLSIDFromString = CLSIDFromString(pwString, guid)
-    Else
-        _System_CLSIDFromString = CLSIDFromProgID(pwString, guid)
-    End If
+		' 1文字目が { ならクラスIDの文字列表現と見なしCLSIDFromStringで変換。
+		_System_CLSIDFromString = CLSIDFromString(pwString, guid)
+	Else
+		_System_CLSIDFromString = CLSIDFromProgID(pwString, guid)
+	End If
+End Function
+
+Function _System_COMReferenceEquals(p As *IUnknown, q As *IUnknown) As Boolean
+	If p = q Then
+		Return True
+	Else If p = 0 Or q = 0 Then
+		Return False
+	End If
+
+	Dim punkX = _System_GetUnknown(p)
+	Dim punkY = _System_GetUnknown(q)
+	If punkX = punkY Then
+		_System_COMReferenceEquals = True
+	Else
+		_System_COMReferenceEquals = False
+	End If
+	punkX->Release()
+	punkY->Release()
+End Function
+
+Function _System_GetUnknown(p As *IUnknown) As *IUnknown 'pは任意のCOMインタフェース
+	If FAILDED(pdisp->QueryInterface(IID_Unknown, _System_GetUnknown)) Then
+		GetUnknown = 0
+	End If
 End Function
 
Index: /Include/system/string.sbp
===================================================================
--- /Include/system/string.sbp	(revision 191)
+++ /Include/system/string.sbp	(revision 192)
@@ -36,7 +36,7 @@
 Function GetStr(psz As PSTR, len As SIZE_T, ByRef wcs As PWSTR) As SIZE_T
 	If psz = 0 Then Return 0
-	Dim sizeWCS = MultiByteToWideChar(CP_THREAD_ACP, 0, psz, len, 0, 0) + 1
-	wcs = _System_AllocForConvertedString(SizeOf (WCHAR) * sizeWCS) As PWSTR
-	GetStr = MultiByteToWideChar(CP_THREAD_ACP, 0, psz, len, wcs, sizeWCS)
+	Dim lenWCS = MultiByteToWideChar(CP_THREAD_ACP, 0, psz, len, 0, 0)
+	wcs = _System_AllocForConvertedString(SizeOf (WCHAR) * (lenWCS + 1)) As PWSTR
+	GetStr = MultiByteToWideChar(CP_THREAD_ACP, 0, psz, len, wcs, lenWCS)
 	wcs[GetStr] = 0
 End Function
@@ -70,7 +70,7 @@
 Function GetStr(psz As PWSTR, len As SIZE_T, ByRef mbs As PSTR) As SIZE_T
 	If psz = 0 Then Return 0
-	Dim sizeMBS = WideCharToMultiByte(CP_THREAD_ACP, 0, psz, len, 0, 0, 0, 0)
-	mbs = _System_AllocForConvertedString(SizeOf (SByte) * (sizeMBS + 1)) As PSTR
-	GetStr = WideCharToMultiByte(CP_THREAD_ACP, 0, psz, len, mbs, sizeMBS, 0, 0) As SIZE_T
+	Dim lenMBS = WideCharToMultiByte(CP_THREAD_ACP, 0, psz, len, 0, 0, 0, 0)
+	mbs = _System_AllocForConvertedString(SizeOf (SByte) * (lenMBS + 1)) As PSTR
+	GetStr = WideCharToMultiByte(CP_THREAD_ACP, 0, psz, len, mbs, lenMBS, 0, 0) As SIZE_T
 	mbs[GetStr] = 0
 End Function
Index: /Include/windows/WindowHandle.sbp
===================================================================
--- /Include/windows/WindowHandle.sbp	(revision 191)
+++ /Include/windows/WindowHandle.sbp	(revision 192)
@@ -1,11 +1,11 @@
-#ifndef __WINDOWSHANDLE_SBP__
-#define __WINDOWSHANDLE_SBP__
+#ifndef __WINDOWS_WINDOWHANDLE_SBP__
+#define __WINDOWS_WINDOWHANDLE_SBP__
 
 #ifdef _WIN64
-Declare Function _System_GetWindowLongPtr Lib "user32" Alias "GetWindowLongPtrA" (hWnd As HWND, nIndex As Long) As LONG_PTR
-Declare Function _System_SetWindowLongPtr Lib "user32" Alias "SetWindowLongPtrA" (hWnd As HWND, nIndex As Long, l As LONG_PTR) As LONG_PTR
+Declare Function _System_GetWindowLongPtr Lib "user32" Alias _FuncName_GetWindowLongPtr (hWnd As HWND, nIndex As Long) As LONG_PTR
+Declare Function _System_SetWindowLongPtr Lib "user32" Alias _FuncName_SetWindowLongPtr (hWnd As HWND, nIndex As Long, l As LONG_PTR) As LONG_PTR
 #else
-Declare Function _System_GetWindowLongPtr Lib "user32" Alias "GetWindowLongA" (hWnd As HWND, nIndex As Long) As LONG_PTR
-Declare Function _System_SetWindowLongPtr Lib "user32" Alias "SetWindowLongA" (hWnd As HWND, nIndex As Long, l As LONG_PTR) As LONG_PTR
+Declare Function _System_GetWindowLongPtr Lib "user32" Alias _FuncName_GetWindowLong (hWnd As HWND, nIndex As Long) As LONG_PTR
+Declare Function _System_SetWindowLongPtr Lib "user32" Alias _FuncName_SetWindowLong (hWnd As HWND, nIndex As Long, l As LONG_PTR) As LONG_PTR
 #endif
 Declare Function _System_GetParent Lib "user32" Alias "GetParent" (hWnd As HWND) As HWND
@@ -18,7 +18,7 @@
 Declare Function _System_ValidateRgn Lib "user32" Alias "ValidateRgn" (hWnd As HWND, hRgn As HRGN) As BOOL
 Declare Function _System_BeginPaint Lib "user32" Alias "BeginPaint" (hWnd As HWND, ByRef ps As PAINTSTRUCT) As HDC
-Declare Function _System_EndPaint Lib "user32" Alias "EndPaint" (hWnd As HWND, ByRef lpPaint As PAINTSTRUCT) As HDC
-Declare Function _System_ClientToScreen Lib "user32" Alias "ClientToScreen" (hWnd As HWND, ByRef lpPoint As POINTAPI) As BOOL
-Declare Function _System_ScreenToClient Lib "user32" Alias "ScreenToClient" (hWnd As HWND, ByRef lpPoint As POINTAPI) As BOOL
+Declare Function _System_EndPaint Lib "user32" Alias "EndPaint" (hWnd As HWND, ByRef ps As PAINTSTRUCT) As HDC
+Declare Function _System_ClientToScreen Lib "user32" Alias "ClientToScreen" (hWnd As HWND, ByRef Point As POINTAPI) As BOOL
+Declare Function _System_ScreenToClient Lib "user32" Alias "ScreenToClient" (hWnd As HWND, ByRef Point As POINTAPI) As BOOL
 Declare Function _System_CreateCaret Lib "user32" Alias "CreateCaret" (hWnd As HWND, hBitmap As HBITMAP, nWidth As Long, nHeight As Long) As BOOL
 Declare Function _System_HideCaret Lib "user32" Alias "HideCaret" (hWnd As HWND) As BOOL
@@ -28,5 +28,5 @@
 Declare Function _System_IsWindow Lib "user32" Alias "IsWindow" (hWnd As HWND) As BOOL
 Declare Function _System_Isiconic Lib "user32" Alias "Isiconic" (hWnd As HWND) As BOOL
-Declare Function _System_GetClientRect Lib "user32" Alias "GetClientRect" (hWnd As HWND, ByRef lpRect As RECT) As BOOL
+Declare Function _System_GetClientRect Lib "user32" Alias "GetClientRect" (hWnd As HWND, ByRef Rect As RECT) As BOOL
 
 Class WindowHandle
@@ -41,5 +41,5 @@
 	End Sub
 
-	Sub WindowHandle(ByRef wnd As WindowHandle)
+	Sub WindowHandle(wnd As WindowHandle)
 		hwnd = wnd.hwnd
 	End Sub
@@ -117,5 +117,5 @@
 	End Function
 
-	Const Function GetClassName(className As PSTR, maxCount As Long) As Long
+	Const Function GetClassName(className As PTSTR, maxCount As Long) As Long
 		Return GetClassName(className, maxCount)
 	End Function
@@ -145,5 +145,5 @@
 	End Function
 
-	Const Function GetDlgItemText(idDlgItem As Long, ps As PSTR, maxCount As Long) As Long
+	Const Function GetDlgItemText(idDlgItem As Long, ps As PTSTR, maxCount As Long) As Long
 		Return GetDlgItemText(hwnd, idDlgItem, ps, maxCount)
 	End Function
@@ -158,10 +158,14 @@
 	End Function
 
-	Const Function GetProp(psz As PCSTR) As HANDLE
+	Const Function GetProp(str As String) As HANDLE
+		Return GetProp(hwnd, ToTCStr(str))
+	End Function
+
+	Const Function GetProp(psz As PCTSTR) As HANDLE
 		Return GetProp(hwnd, psz)
 	End Function
 
 	Const Function GetProp(atom As ATOM) As HANDLE
-		Return GetProp(hwnd, atom As ULONG_PTR As PCSTR)
+		Return GetProp(hwnd, atom As ULONG_PTR As PCTSTR)
 	End Function
 
@@ -202,5 +206,5 @@
 	End Function
 
-	Const Function GetText(ps As PSTR, maxCount As Long) As Boolean
+	Const Function GetText(ps As PTSTR, maxCount As Long) As Boolean
 		Return GetWindowText(ps, maxCount) As Boolean
 	End Function
@@ -215,5 +219,5 @@
 
 	Const Function GetWindowProcessThreadId(ByRef processId As DWord) As DWord
-		Return GetWindowProcessThreadId(hwnd, processId)
+		Return GetWindowProcessThreadId(hwnd, VarPtr(processId))
 	End Function
 
@@ -294,13 +298,13 @@
 	End Function
 
-	Const Function MessageBox(text As PCSTR, caption As PCSTR, uType As DWord) As Long
+	Const Function MessageBox(text As PCTSTR, caption As PCTSTR, uType As DWord) As Long
 		Return MessageBox(hwnd, text, caption, uType)
 	End Function
 
-	Const Function MessageBox(text As PCSTR, caption As PCSTR) As Long
+	Const Function MessageBox(text As PCTSTR, caption As PCTSTR) As Long
 		Return MessageBox(hwnd, text, caption, MB_OK)
 	End Function
 
-	Const Function MessageBox(text As PCSTR) As Long
+	Const Function MessageBox(text As PCTSTR) As Long
 		Return MessageBox(hwnd, text, 0, MB_OK)
 	End Function
@@ -350,10 +354,14 @@
 	End Function
 
-	Function RemoveProp(psz As PCSTR) As HANDLE
+	Function RemoveProp(str As String) As HANDLE
+		Return RemoveProp(hwnd, ToTCStr(str))
+	End Function
+
+	Function RemoveProp(psz As PCTSTR) As HANDLE
 		Return RemoveProp(hwnd, psz)
 	End Function
 
 	Function RemoveProp(atom As ATOM) As HANDLE
-		Return RemoveProp(hwnd, atom As ULONG_PTR As PCSTR)
+		Return RemoveProp(hwnd, atom As ULONG_PTR As PCTSTR)
 	End Function
 
@@ -386,5 +394,5 @@
 	End Function
 
-	Function SetDlgItemText(idDlgItem As Long, psz As PCSTR) As Boolean
+	Function SetDlgItemText(idDlgItem As Long, psz As PCTSTR) As Boolean
 		Return SetDlgItemText(hwnd, idDlgItem, psz) As Boolean
 	End Function
@@ -414,10 +422,14 @@
 	End Function
 
-	Function SetProp(psz As PCSTR, hData As HANDLE) As Boolean
+	Function SetProp(str As String, hData As HANDLE) As Boolean
+		Return SetProp(hwnd, ToTCStr(str), hData) As Boolean
+	End Function
+
+	Function SetProp(psz As PCTSTR, hData As HANDLE) As Boolean
 		Return SetProp(hwnd, psz, hData) As Boolean
 	End Function
 
 	Function SetProp(atom As ATOM, hData As HANDLE) As Boolean
-		Return SetProp(atom As ULONG_PTR As PCSTR, hData) As Boolean
+		Return SetProp(atom As ULONG_PTR As PCTSTR, hData) As Boolean
 	End Function
 
@@ -468,6 +480,10 @@
 	End Function
 
-	Function SetText(psz As PCSTR) As Boolean
+	Function SetText(psz As PCTSTR) As Boolean
 		Return SetWindowText(hwnd, psz) As Boolean
+	End Function
+
+	Function SetText(str As String) As Boolean
+		Return SetWindowText(hwnd, ToTCStr(str)) As Boolean
 	End Function
 
@@ -682,12 +698,40 @@
 	End Sub
 
+	Const Function Prop(str As String) As HANDLE
+		Return GetProp(str)
+	End Function
+
+	Const Function Prop(psz As PCTSTR) As HANDLE
+		Return GetProp(psz)
+	End Function
+
+	Const Function Prop(atom As ATOM) As HANDLE
+		Return GetProp(atom)
+	End Function
+
+	Sub Prop(str As PCTSTR, h As HANDLE)
+		SetProp(str, h)
+	End Sub
+
+	Sub Prop(psz As PCTSTR, h As HANDLE)
+		SetProp(psz, h)
+	End Sub
+
+	Sub Prop(atom As ATOM, h As HANDLE)
+		SetProp(atom, h)
+	End Sub
+
 	Const Function Text() As String
-		With Text
-			.ReSize(GetWindowTextLength(hwnd))
-			.ReSize(GetWindowText(hwnd, .Chars, .Length + 1))
-		End With
-	End Function
-
-	Sub Text(newText As PCSTR)
+		Dim size = GetWindowTextLength(hwnd) + 1
+		Dim p = _System_malloc(SizeOf (TCHAR) * size) As PTSTR
+		Dim length = GetWindowText(hwnd, p, size)
+		Return New String(p, length As SIZE_T)
+	End Function
+
+	Sub Text(newText As String)
+		SetWindowText(hwnd, ToTCStr(newText))
+	End Sub
+
+	Sub Text(newText As PCTSTR)
 		SetWindowText(hwnd, newText)
 	End Sub
@@ -740,3 +784,3 @@
 End Class
 
-#endif '__WINDOWSHANDLE_SBP__
+#endif '__WINDOWS_WINDOWHANDLE_SBP__
