System.Variant.MarshalHelperCastVariant C# (CSharp) Méthode

MarshalHelperCastVariant() static private méthode

static private MarshalHelperCastVariant ( Object pValue, int vt, Variant &v ) : void
pValue Object
vt int
v Variant
Résultat void
        internal static void MarshalHelperCastVariant(Object pValue, int vt, ref Variant v)
        {
            IConvertible iv = pValue as IConvertible;
            if (iv == null)
            {
                switch (vt)
                {

                    case 12: /*VT_VARIANT*/
                        v = new Variant(pValue);
                        break;


                    case 36: /*VT_RECORD*/
                        v = new Variant(pValue);
                        break;

                    case 8: /*VT_BSTR*/
                        if (pValue == null)
                        {
                            v = new Variant(null);
                            v.m_flags = CV_STRING;
                        }
                        else
                        {
                            throw new InvalidCastException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("InvalidCast_CannotCoerceByRefVariant")));
                        }
                        break;

                    default:
                        throw new InvalidCastException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("InvalidCast_CannotCoerceByRefVariant")));
                }
            }
            else
            {
                IFormatProvider provider = CultureInfo.InvariantCulture;
                switch (vt)
                {
                    case 0: /*VT_EMPTY*/
                        v = Empty;
                        break;

                    case 1: /*VT_NULL*/
                        v = DBNull;
                        break;

                    case 2: /*VT_I2*/
                        v = new Variant(iv.ToInt16(provider));
                        break;

                    case 3: /*VT_I4*/
                        v = new Variant(iv.ToInt32(provider));
                        break;

                    case 4: /*VT_R4*/
                        v = new Variant(iv.ToSingle(provider));
                        break;

                    case 5: /*VT_R8*/
                        v = new Variant(iv.ToDouble(provider));
                        break;


                    case 7: /*VT_DATE*/
                        v = new Variant(iv.ToDateTime(provider));
                        break;

                    case 8: /*VT_BSTR*/
                        v = new Variant(iv.ToString(provider));
                        break;


                    case 11: /*VT_BOOL*/
                        v = new Variant(iv.ToBoolean(provider));
                        break;

                    case 12: /*VT_VARIANT*/
                        v = new Variant((Object)iv);
                        break;


                    case 14: /*VT_DECIMAL*/
                        v = new Variant(iv.ToDecimal(provider));
                        break;

                    // case 15: /*unused*/
                    //  NOT SUPPORTED

                    case 16: /*VT_I1*/
                        v = new Variant(iv.ToSByte(provider));
                        break;

                    case 17: /*VT_UI1*/
                        v = new Variant(iv.ToByte(provider));
                        break;

                    case 18: /*VT_UI2*/
                        v = new Variant(iv.ToUInt16(provider));
                        break;

                    case 19: /*VT_UI4*/
                        v = new Variant(iv.ToUInt32(provider));
                        break;

                    case 20: /*VT_I8*/
                        v = new Variant(iv.ToInt64(provider));
                        break;

                    case 21: /*VT_UI8*/
                        v = new Variant(iv.ToUInt64(provider));
                        break;

                    case 22: /*VT_INT*/
                        v = new Variant(iv.ToInt32(provider));
                        break;

                    case 23: /*VT_UINT*/
                        v = new Variant(iv.ToUInt32(provider));
                        break;

                    default:
                        throw new InvalidCastException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("InvalidCast_CannotCoerceByRefVariant")));
                }
            }
        }
    }