Pointer.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / ndp / clr / src / BCL / System / Reflection / Pointer.cs / 1 / Pointer.cs

                            // ==++== 
//
//   Copyright (c) Microsoft Corporation.  All rights reserved.
//
// ==--== 
////////////////////////////////////////////////////////////////////////////////
// 
// This is a wrapper class for Pointers 
//
// 
//
//
namespace System.Reflection {
    using System; 
    using CultureInfo = System.Globalization.CultureInfo;
    using System.Runtime.Serialization; 
 
    [CLSCompliant(false)]
    [Serializable] 
[System.Runtime.InteropServices.ComVisible(true)]
    public sealed class Pointer: ISerializable {
      unsafe private void* _ptr;
      private Type _ptrType; 

      private Pointer() {} 
 
       private unsafe Pointer(SerializationInfo info, StreamingContext context)
      { 
           _ptr = ((IntPtr)(info.GetValue("_ptr", typeof(IntPtr)))).ToPointer();
           _ptrType = (Type)info.GetValue("_ptrType", typeof(Type));
      }
 
       // This method will box an pointer.  We save both the
      // value and the type so we can access it from the native code 
      // during an Invoke. 
      public static unsafe Object Box(void *ptr,Type type) {
          if (type == null) 
            throw new ArgumentNullException("type");
          if (!type.IsPointer)
             throw new ArgumentException(Environment.GetResourceString("Arg_MustBePointer"),"ptr");
 
         Pointer x = new Pointer();
          x._ptr = ptr; 
         x._ptrType = type; 
         return x;
      } 

       // Returned the stored pointer.
      public static unsafe void* Unbox(Object ptr) {
          if (!(ptr is Pointer)) 
             throw new ArgumentException(Environment.GetResourceString("Arg_MustBePointer"),"ptr");
         return ((Pointer)ptr)._ptr; 
       } 

      internal Type GetPointerType() { 
         return _ptrType;
       }

      internal unsafe Object GetPointerValue() { 
          return (IntPtr)_ptr;
       } 
 

 
        unsafe void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) {
            info.AddValue("_ptr", new IntPtr(_ptr));
            info.AddValue("_ptrType", _ptrType);
        } 
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.


                        

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