Exemplo n.º 1
0
        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!");
            }
        }