OAVariantLib.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / clr / src / BCL / Microsoft / Win32 / OAVariantLib.cs / 1 / 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.Reflection;
	using System.Runtime.CompilerServices;
	using CultureInfo = System.Globalization.CultureInfo;
 	using Assert = System.Diagnostics.Assert; 

    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), 
        };
 
    	// Same hack hack hack - 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.
    	 */
        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, source, culture.LCID, GetCVTypeFromClass(targetClass), options);
            return result;
        }   	 

        #endregion 
 

        #region Private Helpers 

    	private static int GetCVTypeFromClass(Type ctype)
        {
#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