private static string GetStringFromTypeDesc(ITypeInfo typeinfo, System.Runtime.InteropServices.ComTypes.TYPEDESC typedesc) { if (typedesc.vt == (short)26) { System.Runtime.InteropServices.ComTypes.TYPEDESC structure = (System.Runtime.InteropServices.ComTypes.TYPEDESC)Marshal.PtrToStructure(typedesc.lpValue, typeof(System.Runtime.InteropServices.ComTypes.TYPEDESC)); return(ComUtil.GetStringFromTypeDesc(typeinfo, structure)); } if (typedesc.vt == (short)27) { System.Runtime.InteropServices.ComTypes.TYPEDESC structure = (System.Runtime.InteropServices.ComTypes.TYPEDESC)Marshal.PtrToStructure(typedesc.lpValue, typeof(System.Runtime.InteropServices.ComTypes.TYPEDESC)); return("SAFEARRAY(" + ComUtil.GetStringFromTypeDesc(typeinfo, structure) + ")"); } if (typedesc.vt == (short)29) { return(ComUtil.GetStringFromCustomType(typeinfo, typedesc.lpValue)); } switch ((VarEnum)typedesc.vt) { case VarEnum.VT_EMPTY: return(""); case VarEnum.VT_I2: return("short"); case VarEnum.VT_I4: case VarEnum.VT_INT: case VarEnum.VT_HRESULT: return("int"); case VarEnum.VT_R4: return("float"); case VarEnum.VT_R8: return("double"); case VarEnum.VT_CY: return("currency"); case VarEnum.VT_DATE: return("Date"); case VarEnum.VT_BSTR: case VarEnum.VT_LPSTR: case VarEnum.VT_LPWSTR: return("string"); case VarEnum.VT_DISPATCH: return("IDispatch"); case VarEnum.VT_BOOL: return("bool"); case VarEnum.VT_VARIANT: return("Variant"); case VarEnum.VT_UNKNOWN: return("IUnknown"); case VarEnum.VT_DECIMAL: return("decimal"); case VarEnum.VT_I1: return("char"); case VarEnum.VT_UI1: return("byte"); case VarEnum.VT_UI2: return("ushort"); case VarEnum.VT_UI4: case VarEnum.VT_UINT: return("uint"); case VarEnum.VT_I8: return("int64"); case VarEnum.VT_UI8: return("uint64"); case VarEnum.VT_VOID: return("void"); case VarEnum.VT_CLSID: return("clsid"); case VarEnum.VT_ARRAY: return("object[]"); default: return("Unknown!"); } }