using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace FL_netCaoTester { partial class Common { public string ConvertVariantToString(object Value, ref bool bArrayChecked, ref int iTypeSelectedIndex) { string str = string.Empty; if (Value == null) { iTypeSelectedIndex = TypeIdx(0); // 0: VT_EMPTY return str; } string type = Value.GetType().Name; bool isArray = type.Contains("[]"); bool isVnt = type.Contains("object"); int vartype; if (!isArray) { str = this.ConvertObjectToString(Value, false, out vartype); bArrayChecked = false; iTypeSelectedIndex = this.TypeIdx(vartype); } else { int i = 1; if (isVnt) { object[] vnt = (object[])Value; foreach (object Val in vnt) { str += this.ConvertObjectToString(Val, true, out vartype); if (i < vnt.Length) { str += ", "; } i++; } iTypeSelectedIndex = 12; // VT_VARIANT } else { str = this.ConvertVslArrayToString(Value, out vartype); iTypeSelectedIndex = this.TypeIdx(vartype); } bArrayChecked = true; } return str; } public int TypeIdx(int vartype) { int idx = -1; switch (vartype) { case 11: // VT_BOOL idx = 0; break; case 16: // VT_I1 idx = 1; break; case 2: // VT_I2 idx = 2; break; case 3: // VT_I4 idx = 3; break; case 20: // VT_I8 idx = 4; break; case 17: // VT_UI1 idx = 5; break; case 18: // VT_UI2 idx = 6; break; case 19: // VT_UI4 idx = 7; break; case 21: // VT_UI8 idx = 8; break; case 4: // VT_R4 idx = 9; break; case 5: // VT_R8 idx = 10; break; case 8: // VT_BSTR idx = 11; break; case 12: // VT_VARIANT idx = 12; break; case 0: // VT_EMPTY idx = 13; break; } return idx; } public string ConvertObjectToString(object Value, bool IsVnt, out int vartype) { string str = string.Empty; vartype = 0; if (Value == null) { return str; } string Type = Value.GetType().Name; if (IsVnt) str += "("; switch (Type) { case "SByte": // VT_I1 vartype = 16; if (IsVnt) str += "16, "; str += ((SByte)Value).ToString(); break; case "Int16": // VT_I2 vartype = 2; if (IsVnt) str += "2, "; str += ((Int16)Value).ToString(); break; case "Int32": // VT_I4 vartype = 3; if (IsVnt) str += "3, "; str += ((Int32)Value).ToString(); break; case "Int64": // VT_I8 vartype = 20; if (IsVnt) str += "20, "; str += ((Int64)Value).ToString(); break; case "Byte": // VT_UI1 vartype = 17; if (IsVnt) str += "17, "; str += ((Byte)Value).ToString(); break; case "UInt16": // VT_UI2 vartype = 18; if (IsVnt) str += "18, "; str += ((UInt16)Value).ToString(); break; case "UInt32": // VT_UI4 vartype = 19; if (IsVnt) str += "19, "; str += ((UInt32)Value).ToString(); break; case "UInt64": // VT_UI8 vartype = 21; if (IsVnt) str += "21, "; str += ((UInt64)Value).ToString(); break; case "Single": // VT_R4 vartype = 4; if (IsVnt) str += "4, "; str += ((Single)Value).ToString(); break; case "Double": // VT_R8 vartype = 5; if (IsVnt) str += "5, "; str += ((Double)Value).ToString(); break; case "DateTime": // VT_DATE vartype = 7; if (IsVnt) str += "7, "; str += ((DateTime)Value).ToString(); break; case "String": // VT_BSTR vartype = 8; if (IsVnt) str += "8, "; str += (String)Value; break; case "Boolean": // VT_BOOL vartype = 11; if (IsVnt) str += "11, "; str += ((Boolean)Value).ToString(); break; default: // TODO: if (IsVnt) str += Type + ", "; str += "????"; break; } if (IsVnt) str += ")"; return str; } public string ConvertVslArrayToString(object Value, out int vartype) { string str = string.Empty; vartype = 0; if (Value == null) { return str; } string type = Value.GetType().Name.Trim('[', ']'); int i = 1; switch (type) { case "SByte": // VT_I1 { SByte[] vnt = (SByte[])Value; foreach (object Val in vnt) { str += this.ConvertObjectToString(Val, false, out vartype); if (i < vnt.Length) { str += ", "; } i++; } } break; case "Int16": // VT_I2 { Int16[] vnt = (Int16[])Value; foreach (object Val in vnt) { str += this.ConvertObjectToString(Val, false, out vartype); if (i < vnt.Length) { str += ", "; } i++; } } break; case "Int32": // VT_I4 { Int32[] vnt = (Int32[])Value; foreach (object Val in vnt) { str += this.ConvertObjectToString(Val, false, out vartype); if (i < vnt.Length) { str += ", "; } i++; } } break; case "Int64": // VT_I8 { Int64[] vnt = (Int64[])Value; foreach (object Val in vnt) { str += this.ConvertObjectToString(Val, false, out vartype); if (i < vnt.Length) { str += ", "; } i++; } } break; case "Byte": // VT_UI1 { Byte[] vnt = (Byte[])Value; foreach (object Val in vnt) { str += this.ConvertObjectToString(Val, false, out vartype); if (i < vnt.Length) { str += ", "; } i++; } } break; case "UInt16": // VT_UI2 { UInt16[] vnt = (UInt16[])Value; foreach (object Val in vnt) { str += this.ConvertObjectToString(Val, false, out vartype); if (i < vnt.Length) { str += ", "; } i++; } } break; case "UInt32": // VT_UI4 { UInt32[] vnt = (UInt32[])Value; foreach (object Val in vnt) { str += this.ConvertObjectToString(Val, false, out vartype); if (i < vnt.Length) { str += ", "; } i++; } } break; case "UInt64": // VT_UI8 { UInt64[] vnt = (UInt64[])Value; foreach (object Val in vnt) { str += this.ConvertObjectToString(Val, false, out vartype); if (i < vnt.Length) { str += ", "; } i++; } } break; case "Single": // VT_R4 { Single[] vnt = (Single[])Value; foreach (object Val in vnt) { str += this.ConvertObjectToString(Val, false, out vartype); if (i < vnt.Length) { str += ", "; } i++; } } break; case "Double": // VT_R8 { Double[] vnt = (Double[])Value; foreach (object Val in vnt) { str += this.ConvertObjectToString(Val, false, out vartype); if (i < vnt.Length) { str += ", "; } i++; } } break; case "String": // VT_BSTR { String[] vnt = (String[])Value; foreach (object Val in vnt) { str += this.ConvertObjectToString(Val, false, out vartype); if (i < vnt.Length) { str += ", "; } i++; } } break; case "Boolean": // VT_BOOL { Boolean[] vnt = (Boolean[])Value; foreach (object Val in vnt) { str += this.ConvertObjectToString(Val, false, out vartype); if (i < vnt.Length) { str += ", "; } i++; } } break; } return str; } public object ConvertStringToObject(string[] ValArray, ref bool bArrayEnabled, ref int SelectedIndex) { object objDst = new object(); switch (SelectedIndex) { case 0: // VT_BOOL { //if (ValArray.Length > 1) if (bArrayEnabled) { Boolean[] Array = new Boolean[ValArray.Length]; for (int i = 0; i < ValArray.Length; i++) { string str = ValArray[i]; str = str.TrimStart(); str = str.TrimEnd(); Array[i] = Boolean.Parse(str); } objDst = Array; } else { string str = ValArray[0]; str = str.TrimStart(); str = str.TrimEnd(); objDst = Boolean.Parse(str); } } break; case 1: // VT_I1 { //if (ValArray.Length > 1) if (bArrayEnabled) { SByte[] Array = new SByte[ValArray.Length]; for (int i = 0; i < ValArray.Length; i++) { string str = ValArray[i]; str = str.TrimStart(); str = str.TrimEnd(); Array[i] = SByte.Parse(str); } objDst = Array; } else { string str = ValArray[0]; str = str.TrimStart(); str = str.TrimEnd(); objDst = SByte.Parse(str); } } break; case 2: // VT_I2 { //if (ValArray.Length > 1) if (bArrayEnabled) { Int16[] Array = new Int16[ValArray.Length]; for (int i = 0; i < ValArray.Length; i++) { string str = ValArray[i]; str = str.TrimStart(); str = str.TrimEnd(); Array[i] = Int16.Parse(str); } objDst = Array; } else { string str = ValArray[0]; str = str.TrimStart(); str = str.TrimEnd(); objDst = Int16.Parse(str); } } break; case 3: // VT_I4 { //if (ValArray.Length > 1) if (bArrayEnabled) { Int32[] Array = new Int32[ValArray.Length]; for (int i = 0; i < ValArray.Length; i++) { string str = ValArray[i]; str = str.TrimStart(); str = str.TrimEnd(); Array[i] = Int32.Parse(str); } objDst = Array; } else { string str = ValArray[0]; str = str.TrimStart(); str = str.TrimEnd(); objDst = Int32.Parse(str); } } break; case 4: // VT_I8 { //if (ValArray.Length > 1) if (bArrayEnabled) { Int64[] Array = new Int64[ValArray.Length]; for (int i = 0; i < ValArray.Length; i++) { string str = ValArray[i]; str = str.TrimStart(); str = str.TrimEnd(); Array[i] = Int64.Parse(str); } objDst = Array; } else { string str = ValArray[0]; str = str.TrimStart(); str = str.TrimEnd(); objDst = Int64.Parse(str); } } break; case 5: // VT_UI1 { //if (ValArray.Length > 1) if (bArrayEnabled) { Byte[] Array = new Byte[ValArray.Length]; for (int i = 0; i < ValArray.Length; i++) { string str = ValArray[i]; str = str.TrimStart(); str = str.TrimEnd(); Array[i] = Byte.Parse(str); } objDst = Array; } else { string str = ValArray[0]; str = str.TrimStart(); str = str.TrimEnd(); objDst = Byte.Parse(str); } } break; case 6: // VT_UI2 { //if (ValArray.Length > 1) if (bArrayEnabled) { UInt16[] Array = new UInt16[ValArray.Length]; for (int i = 0; i < ValArray.Length; i++) { string str = ValArray[i]; str = str.TrimStart(); str = str.TrimEnd(); Array[i] = UInt16.Parse(str); } objDst = Array; } else { string str = ValArray[0]; str = str.TrimStart(); str = str.TrimEnd(); objDst = UInt16.Parse(str); } } break; case 7: // VT_UI4 { //if (ValArray.Length > 1) if (bArrayEnabled) { UInt32[] Array = new UInt32[ValArray.Length]; for (int i = 0; i < ValArray.Length; i++) { string str = ValArray[i]; str = str.TrimStart(); str = str.TrimEnd(); Array[i] = UInt32.Parse(str); } objDst = Array; } else { string str = ValArray[0]; str = str.TrimStart(); str = str.TrimEnd(); objDst = UInt32.Parse(str); } } break; case 8: // VT_UI8 { //if (ValArray.Length > 1) if (bArrayEnabled) { UInt64[] Array = new UInt64[ValArray.Length]; for (int i = 0; i < ValArray.Length; i++) { string str = ValArray[i]; str = str.TrimStart(); str = str.TrimEnd(); Array[i] = UInt64.Parse(str); } objDst = Array; } else { string str = ValArray[0]; str = str.TrimStart(); str = str.TrimEnd(); objDst = UInt64.Parse(str); } } break; case 9: // VT_R4 { //if (ValArray.Length > 1) if (bArrayEnabled) { Single[] Array = new Single[ValArray.Length]; for (int i = 0; i < ValArray.Length; i++) { string str = ValArray[i]; str = str.TrimStart(); str = str.TrimEnd(); Array[i] = Single.Parse(str); } objDst = Array; } else { string str = ValArray[0]; str = str.TrimStart(); str = str.TrimEnd(); objDst = Single.Parse(str); } } break; case 10: // VT_R8 { //if (ValArray.Length > 1) if (bArrayEnabled) { Double[] Array = new Double[ValArray.Length]; for (int i = 0; i < ValArray.Length; i++) { string str = ValArray[i]; str = str.TrimStart(); str = str.TrimEnd(); Array[i] = Double.Parse(str); } objDst = Array; } else { string str = ValArray[0]; str = str.TrimStart(); str = str.TrimEnd(); objDst = Double.Parse(str); } } break; case 11: // VT_BSTR { //if (ValArray.Length > 1) if (bArrayEnabled) { string[] Array = new string[ValArray.Length]; for (int i = 0; i < ValArray.Length; i++) { string str = ValArray[i]; str = str.TrimStart(); str = str.TrimEnd(); Array[i] = str; } objDst = Array; } else { string str = ValArray[0]; str = str.TrimStart(); str = str.TrimEnd(); objDst = str; } } break; case 12: // TODO: VT_VARIANT対応(object配列にして渡す) throw new System.ArgumentException("VT_VARIANT型は未対応"); default: throw new System.ArgumentException("未対応型"); } return objDst; } } }