OAVariantLib.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / Microsoft / Win32 / OAVariantLib.cs / 1305376 / OAVariantLib.cs

                            // ==++== 
//
//   Copyright (c) Microsoft Corporation.  All rights reserved.
//
// ==--== 
/*============================================================
** 
** Class:  OAVariantLib 
**
** 
** Purpose: This class only exists to provide support for
**          implenting IDispatch on managed objects. It is
**          used to provide OleAut style coercion rules.
** 
**
===========================================================*/ 
namespace Microsoft.Win32 { 

    using System; 
    using System.Diagnostics.Contracts;
    using System.Reflection;
    using System.Runtime.CompilerServices;
    using System.Runtime.Versioning; 
    using CultureInfo = System.Globalization.CultureInfo;
 
    internal sealed class OAVariantLib 
    {
        #region Contants 

        // Constants for VariantChangeType from OleAuto.h
        public const int NoValueProp = 0x01;
        public const int AlphaBool = 0x02; 
        public const int NoUserOverride = 0x04;
        public const int CalendarHijri = 0x08; 
        public const int LocalBool = 0x10; 

        internal static readonly Type [] ClassTypes = { 
            typeof(Empty),
            typeof(void),
            typeof(Boolean),
            typeof(Char), 
            typeof(SByte),
            typeof(Byte), 
            typeof(Int16), 
            typeof(UInt16),
            typeof(Int32), 
            typeof(UInt32),
            typeof(Int64),
            typeof(UInt64),
            typeof(Single), 
            typeof(Double),
            typeof(String), 
            typeof(void), 
            typeof(DateTime),
            typeof(TimeSpan), 
            typeof(Object),
            typeof(Decimal),
            null,  // Enums - what do we do here?
            typeof(Missing), 
            typeof(DBNull),
        }; 
 
    	// Keep these numbers in [....] w/ the above array.
        private const int CV_OBJECT=0x12; 

        #endregion

 
        #region Private Constructor
 
        private OAVariantLib() 
        {
        } 

        #endregion

 
        #region Internal Methods
 
        /** 
         * Changes a Variant from one type to another, calling the OLE
         * Automation VariantChangeTypeEx routine.  Note the legal types here are 
         * restricted to the subset of what can be legally found in a VB
         * Variant and the types that CLR supports explicitly in the
         * CLR Variant class.
         */ 
#if FEATURE_COMINTEROP
        [System.Security.SecurityCritical]  // auto-generated 
        internal static Variant ChangeType(Variant source, Type targetClass, short options, CultureInfo culture) 
        {
            if (targetClass == null) 
                throw new ArgumentNullException("targetClass");
            if (culture == null)
                throw new ArgumentNullException("culture");
            Variant result = new Variant (); 
            ChangeTypeEx(ref result, ref source, culture.LCID, targetClass.TypeHandle.Value, GetCVTypeFromClass(targetClass), options);
            return result; 
        } 
#endif
        #endregion 


        #region Private Helpers
 
        private static int GetCVTypeFromClass(Type ctype)
        { 
            Contract.Requires(ctype != null); 
#if _DEBUG
            BCLDebug.Assert(ClassTypes[CV_OBJECT] == typeof(Object), "OAVariantLib::ClassTypes[CV_OBJECT] == Object.class"); 
#endif

            int cvtype=-1;
            for (int i=0; i

                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK