2 out of 2 rated this helpful - Rate this topic

Marshal Class

Provides a collection of methods for allocating unmanaged memory, copying unmanaged memory blocks, and converting managed to unmanaged types, as well as other miscellaneous methods used when interacting with unmanaged code.

System.Object
  System.Runtime.InteropServices.Marshal

Namespace:  System.Runtime.InteropServices
Assembly:  mscorlib (in mscorlib.dll)
public static class Marshal

The Marshal type exposes the following members.

  Name Description
Public method Static member AddRef Increments the reference count on the specified interface.
Public method Static member AllocCoTaskMem Allocates a block of memory of specified size from the COM task memory allocator.
Public method Static member AllocHGlobal(Int32) Allocates memory from the unmanaged memory of the process by using the specified number of bytes.
Public method Static member AllocHGlobal(IntPtr) Allocates memory from the unmanaged memory of the process by using the pointer to the specified number of bytes.
Public method Static member AreComObjectsAvailableForCleanup Indicates whether runtime callable wrappers (RCWs) from any context are available for cleanup.
Public method Static member BindToMoniker Gets an interface pointer identified by the specified moniker.
Public method Static member ChangeWrapperHandleStrength Changes the strength of an object's COM Callable Wrapper (CCW) handle.
Public method Static member CleanupUnusedObjectsInCurrentContext Notifies the runtime to clean up all Runtime Callable Wrappers (RCWs) allocated in the current context.
Public method Static member Supported by the XNA Framework Copy(Byte[], Int32, IntPtr, Int32) Copies data from a one-dimensional, managed 8-bit unsigned integer array to an unmanaged memory pointer.
Public method Static member Supported by the XNA Framework Copy(Char[], Int32, IntPtr, Int32) Copies data from a one-dimensional, managed character array to an unmanaged memory pointer.
Public method Static member Supported by the XNA Framework Copy(Double[], Int32, IntPtr, Int32) Copies data from a one-dimensional, managed double-precision floating-point number array to an unmanaged memory pointer.
Public method Static member Supported by the XNA Framework Copy(Int16[], Int32, IntPtr, Int32) Copies data from a one-dimensional, managed 16-bit signed integer array to an unmanaged memory pointer.
Public method Static member Supported by the XNA Framework Copy(Int32[], Int32, IntPtr, Int32) Copies data from a one-dimensional, managed 32-bit signed integer array to an unmanaged memory pointer.
Public method Static member Supported by the XNA Framework Copy(Int64[], Int32, IntPtr, Int32) Copies data from a one-dimensional, managed 64-bit signed integer array to an unmanaged memory pointer.
Public method Static member Supported by the XNA Framework Copy(IntPtr, Byte[], Int32, Int32) Copies data from an unmanaged memory pointer to a managed 8-bit unsigned integer array.
Public method Static member Supported by the XNA Framework Copy(IntPtr, Char[], Int32, Int32) Copies data from an unmanaged memory pointer to a managed character array.
Public method Static member Supported by the XNA Framework Copy(IntPtr, Double[], Int32, Int32) Copies data from an unmanaged memory pointer to a managed double-precision floating-point number array.
Public method Static member Supported by the XNA Framework Copy(IntPtr, Int16[], Int32, Int32) Copies data from an unmanaged memory pointer to a managed 16-bit signed integer array.
Public method Static member Supported by the XNA Framework Copy(IntPtr, Int32[], Int32, Int32) Copies data from an unmanaged memory pointer to a managed 32-bit signed integer array.
Public method Static member Supported by the XNA Framework Copy(IntPtr, Int64[], Int32, Int32) Copies data from an unmanaged memory pointer to a managed 64-bit signed integer array.
Public method Static member Copy(IntPtr, IntPtr[], Int32, Int32) Copies data from an unmanaged memory pointer to a managed IntPtr array.
Public method Static member Supported by the XNA Framework Copy(IntPtr, Single[], Int32, Int32) Copies data from an unmanaged memory pointer to a managed single-precision floating-point number array.
Public method Static member Copy(IntPtr[], Int32, IntPtr, Int32) Copies data from a one-dimensional, managed IntPtr array to an unmanaged memory pointer.
Public method Static member Supported by the XNA Framework Copy(Single[], Int32, IntPtr, Int32) Copies data from a one-dimensional, managed single-precision floating-point number array to an unmanaged memory pointer.
Public method Static member CreateAggregatedObject Aggregates a managed object with the specified COM object.
Public method Static member CreateWrapperOfType Wraps the specified COM object in an object of the specified type.
Public method Static member Supported by the XNA Framework DestroyStructure Frees all substructures that the specified unmanaged memory block points to.
Public method Static member FinalReleaseComObject Releases all references to a Runtime Callable Wrapper (RCW) by setting its reference count to 0.
Public method Static member FreeBSTR Frees a BSTR using the COM SysFreeString function.
Public method Static member FreeCoTaskMem Frees a block of memory allocated by the unmanaged COM task memory allocator.
Public method Static member FreeHGlobal Frees memory previously allocated from the unmanaged memory of the process.
Public method Static member GenerateGuidForType Returns the globally unique identifier (GUID) for the specified type, or generates a GUID using the algorithm used by the Type Library Exporter (Tlbexp.exe).
Public method Static member GenerateProgIdForType Returns a programmatic identifier (ProgID) for the specified type.
Public method Static member GetActiveObject Obtains a running instance of the specified object from the running object table (ROT).
Public method Static member GetComInterfaceForObject(Object, Type) Returns a pointer to an IUnknown interface that represents the specified interface on the specified object. Custom query interface access is enabled by default.
Public method Static member GetComInterfaceForObject(Object, Type, CustomQueryInterfaceMode) Returns a pointer to an IUnknown interface that represents the specified interface on the specified object. Custom query interface access is controlled by the specified customization mode.
Public method Static member GetComInterfaceForObjectInContext Returns an interface pointer that represents the specified interface for an object, if the caller is in the same context as that object.
Public method Static member GetComObjectData Retrieves data that is referenced by the specified key from the specified COM object.
Public method Static member GetComSlotForMethodInfo Retrieves the virtual function table (v-table or VTBL) slot for a specified System.Reflection.MemberInfo type when that type is exposed to COM.
Public method Static member GetDelegateForFunctionPointer Converts an unmanaged function pointer to a delegate.
Public method Static member GetEndComSlot Retrieves the last slot in the virtual function table (v-table or VTBL) of a type when exposed to COM.
Public method Static member GetExceptionCode Retrieves a code that identifies the type of the exception that occurred.
Public method Static member GetExceptionForHR(Int32) Converts the specified HRESULT error code to a corresponding Exception object.
Public method Static member GetExceptionForHR(Int32, IntPtr) Converts the specified HRESULT error code to a corresponding Exception object, with additional error information passed in an IErrorInfo interface for the exception object.
Public method Static member GetExceptionPointers Retrieves a computer-independent description of an exception, and information about the state that existed for the thread when the exception occurred.
Public method Static member GetFunctionPointerForDelegate Converts a delegate into a function pointer that is callable from unmanaged code.
Public method Static member GetHINSTANCE Returns the instance handle (HINSTANCE) for the specified module.
Public method Static member GetHRForException Converts the specified exception to an HRESULT.
Public method Static member GetHRForLastWin32Error Returns the HRESULT corresponding to the last error incurred by Win32 code executed using Marshal.
Public method Static member GetIDispatchForObject Returns an IDispatch interface from a managed object.
Public method Static member GetIDispatchForObjectInContext Returns an IDispatch interface pointer from a managed object, if the caller is in the same context as that object.
Public method Static member GetITypeInfoForType Returns a System.Runtime.InteropServices.ComTypes.ITypeInfo interface from a managed type.
Public method Static member GetIUnknownForObject Returns an IUnknown interface from a managed object.
Public method Static member GetIUnknownForObjectInContext Returns an IUnknown interface from a managed object, if the caller is in the same context as that object.
Public method Static member Supported by the XNA Framework GetLastWin32Error Returns the error code returned by the last unmanaged function that was called using platform invoke that has the DllImportAttribute.SetLastError flag set.
Public method Static member GetManagedThunkForUnmanagedMethodPtr Obsolete. Gets a pointer to a runtime-generated function that marshals a call from managed to unmanaged code.
Public method Static member GetMethodInfoForComSlot Retrieves a MemberInfo object for the specified virtual function table (v-table or VTBL) slot.
Public method Static member GetNativeVariantForObject Converts an object to a COM VARIANT.
Public method Static member GetObjectForIUnknown Returns an instance of a type that represents a COM object by a pointer to its IUnknown interface.
Public method Static member GetObjectForNativeVariant Converts a COM VARIANT to an object.
Public method Static member GetObjectsForNativeVariants Converts an array of COM VARIANTs to an array of objects.
Public method Static member GetStartComSlot Gets the first slot in the virtual function table (v-table or VTBL) that contains user-defined methods.
Public method Static member GetThreadFromFiberCookie Obsolete. Converts a fiber cookie into the corresponding System.Threading.Thread instance.
Public method Static member GetTypedObjectForIUnknown Returns a managed object of a specified type that represents a COM object.
Public method Static member GetTypeForITypeInfo Converts an unmanaged ITypeInfo object into a managed System.Type object.
Public method Static member GetTypeInfoName(ITypeInfo) Retrieves the name of the type represented by an ITypeInfo object.
Public method Static member GetTypeInfoName(UCOMITypeInfo) Obsolete. Retrieves the name of the type represented by an ITypeInfo object.
Public method Static member GetTypeLibGuid(ITypeLib) Retrieves the library identifier (LIBID) of a type library.
Public method Static member GetTypeLibGuid(UCOMITypeLib) Obsolete. Retrieves the library identifier (LIBID) of a type library.
Public method Static member GetTypeLibGuidForAssembly Retrieves the library identifier (LIBID) that is assigned to a type library when it was exported from the specified assembly.
Public method Static member GetTypeLibLcid(ITypeLib) Retrieves the LCID of a type library.
Public method Static member GetTypeLibLcid(UCOMITypeLib) Obsolete. Retrieves the LCID of a type library.
Public method Static member GetTypeLibName(ITypeLib) Retrieves the name of a type library.
Public method Static member GetTypeLibName(UCOMITypeLib) Obsolete. Retrieves the name of a type library.
Public method Static member GetTypeLibVersionForAssembly Retrieves the version number of a type library that will be exported from the specified assembly.
Public method Static member GetUniqueObjectForIUnknown Creates a unique Runtime Callable Wrapper (RCW) object for a given IUnknown interface.
Public method Static member GetUnmanagedThunkForManagedMethodPtr Obsolete. Gets a pointer to a runtime-generated function that marshals a call from unmanaged to managed code.
Public method Static member IsComObject Indicates whether a specified object represents a COM object.
Public method Static member IsTypeVisibleFromCom Indicates whether a type is visible to COM clients.
Public method Static member NumParamBytes Calculates the number of bytes in unmanaged memory that are required to hold the parameters for the specified method.
Public method Static member OffsetOf Returns the field offset of the unmanaged form of the managed class.
Public method Static member Supported by the XNA Framework Prelink Executes one-time method setup tasks without calling the method.
Public method Static member Supported by the XNA Framework PrelinkAll Performs a pre-link check for all methods on a class.
Public method Static member PtrToStringAnsi(IntPtr) Copies all characters up to the first null character from an unmanaged ANSI string to a managed String, and widens each ANSI character to Unicode.
Public method Static member PtrToStringAnsi(IntPtr, Int32) Allocates a managed String, copies a specified number of characters from an unmanaged ANSI string into it, and widens each ANSI character to Unicode.
Public method Static member PtrToStringAuto(IntPtr) Allocates a managed String and copies all characters up to the first null character from a string stored in unmanaged memory into it.
Public method Static member PtrToStringAuto(IntPtr, Int32) Allocates a managed String and copies the specified number of characters from a string stored in unmanaged memory into it.
Public method Static member PtrToStringBSTR Allocates a managed String and copies a BSTR Data Type string stored in unmanaged memory into it.
Public method Static member Supported by the XNA Framework PtrToStringUni(IntPtr) Allocates a managed String and copies all characters up to the first null character from an unmanaged Unicode string into it.
Public method Static member Supported by the XNA Framework PtrToStringUni(IntPtr, Int32) Allocates a managed String and copies a specified number of characters from an unmanaged Unicode string into it.
Public method Static member Supported by the XNA Framework PtrToStructure(IntPtr, Object) Marshals data from an unmanaged block of memory to a managed object.
Public method Static member Supported by the XNA Framework PtrToStructure(IntPtr, Type) Marshals data from an unmanaged block of memory to a newly allocated managed object of the specified type.
Public method Static member QueryInterface Requests a pointer to a specified interface from a COM object.
Public method Static member Supported by the XNA Framework ReadByte(IntPtr) Reads a single byte from unmanaged memory.
Public method Static member Supported by the XNA Framework ReadByte(IntPtr, Int32) Reads a single byte at a given offset (or index) from unmanaged memory.
Public method Static member ReadByte(Object, Int32) Reads a single byte at a given offset (or index) from unmanaged memory.
Public method Static member Supported by the XNA Framework ReadInt16(IntPtr) Reads a 16-bit signed integer from unmanaged memory.
Public method Static member Supported by the XNA Framework ReadInt16(IntPtr, Int32) Reads a 16-bit signed integer at a given offset from unmanaged memory.
Public method Static member ReadInt16(Object, Int32) Reads a 16-bit signed integer at a given offset from unmanaged memory.
Public method Static member Supported by the XNA Framework ReadInt32(IntPtr) Reads a 32-bit signed integer from unmanaged memory.
Public method Static member Supported by the XNA Framework ReadInt32(IntPtr, Int32) Reads a 32-bit signed integer at a given offset from unmanaged memory.
Public method Static member ReadInt32(Object, Int32) Reads a 32-bit signed integer at a given offset from unmanaged memory.
Public method Static member Supported by the XNA Framework ReadInt64(IntPtr) Reads a 64-bit signed integer from unmanaged memory.
Public method Static member Supported by the XNA Framework ReadInt64(IntPtr, Int32) Reads a 64-bit signed integer at a given offset from unmanaged memory.
Public method Static member ReadInt64(Object, Int32) Reads a 64-bit signed integer at a given offset from unmanaged memory.
Public method Static member Supported by the XNA Framework ReadIntPtr(IntPtr) Reads a processor native-sized integer from unmanaged memory.
Public method Static member ReadIntPtr(IntPtr, Int32) Reads a processor native sized integer at a given offset from unmanaged memory.
Public method Static member ReadIntPtr(Object, Int32) Reads a processor native sized integer from unmanaged memory.
Public method Static member ReAllocCoTaskMem Resizes a block of memory previously allocated with AllocCoTaskMem.
Public method Static member ReAllocHGlobal Resizes a block of memory previously allocated with AllocHGlobal.
Public method Static member Release Decrements the reference count on the specified interface.
Public method Static member ReleaseComObject Decrements the reference count of the specified Runtime Callable Wrapper (RCW) associated with the specified COM object.
Public method Static member ReleaseThreadCache Obsolete. Releases the thread cache.
Public method Static member SecureStringToBSTR Allocates a BSTR Data Type and copies the contents of a managed SecureString object into it.
Public method Static member SecureStringToCoTaskMemAnsi Copies the contents of a managed SecureString object to a block of memory allocated from the unmanaged COM task allocator.
Public method Static member SecureStringToCoTaskMemUnicode Copies the contents of a managed SecureString object to a block of memory allocated from the unmanaged COM task allocator.
Public method Static member SecureStringToGlobalAllocAnsi Copies the contents of a managed SecureString into unmanaged memory, converting into ANSI format as it copies.
Public method Static member SecureStringToGlobalAllocUnicode Copies the contents of a managed SecureString object into unmanaged memory.
Public method Static member SetComObjectData Sets data referenced by the specified key in the specified COM object.
Public method Static member Supported by the XNA Framework SizeOf(Object) Returns the unmanaged size of an object in bytes.
Public method Static member Supported by the XNA Framework SizeOf(Type) Returns the size of an unmanaged type in bytes.
Public method Static member StringToBSTR Allocates a BSTR Data Type and copies the contents of a managed String into it.
Public method Static member StringToCoTaskMemAnsi Copies the contents of a managed String to a block of memory allocated from the unmanaged COM task allocator.
Public method Static member StringToCoTaskMemAuto Copies the contents of a managed String to a block of memory allocated from the unmanaged COM task allocator.
Public method Static member StringToCoTaskMemUni Copies the contents of a managed String to a block of memory allocated from the unmanaged COM task allocator.
Public method Static member StringToHGlobalAnsi Copies the contents of a managed String into unmanaged memory, converting into ANSI format as it copies.
Public method Static member StringToHGlobalAuto Copies the contents of a managed String into unmanaged memory, converting into ANSI format if required.
Public method Static member StringToHGlobalUni Copies the contents of a managed String into unmanaged memory.
Public method Static member Supported by the XNA Framework StructureToPtr Marshals data from a managed object to an unmanaged block of memory.
Public method Static member ThrowExceptionForHR(Int32) Throws an exception with a specific failure HRESULT value.
Public method Static member ThrowExceptionForHR(Int32, IntPtr) Throws an exception with a specific failure HRESULT, based on the specified IErrorInfo Interface interface.
Public method Static member UnsafeAddrOfPinnedArrayElement Gets the address of the element at the specified index inside the specified array.
Public method Static member Supported by the XNA Framework WriteByte(IntPtr, Byte) Writes a single byte value to unmanaged memory.
Public method Static member Supported by the XNA Framework WriteByte(IntPtr, Int32, Byte) Writes a single byte value to unmanaged memory at a specified offset.
Public method Static member WriteByte(Object, Int32, Byte) Writes a single byte value to unmanaged memory at a specified offset.
Public method Static member WriteInt16(IntPtr, Char) Writes a character as a 16-bit integer value to unmanaged memory.
Public method Static member Supported by the XNA Framework WriteInt16(IntPtr, Int16) Writes a 16-bit integer value to unmanaged memory.
Public method Static member WriteInt16(IntPtr, Int32, Char) Writes a 16-bit signed integer value to unmanaged memory at a specified offset.
Public method Static member Supported by the XNA Framework WriteInt16(IntPtr, Int32, Int16) Writes a 16-bit signed integer value into unmanaged memory at a specified offset.
Public method Static member WriteInt16(Object, Int32, Char) Writes a 16-bit signed integer value to unmanaged memory at a specified offset.
Public method Static member WriteInt16(Object, Int32, Int16) Writes a 16-bit signed integer value to unmanaged memory at a specified offset.
Public method Static member Supported by the XNA Framework WriteInt32(IntPtr, Int32) Writes a 32-bit signed integer value to unmanaged memory.
Public method Static member Supported by the XNA Framework WriteInt32(IntPtr, Int32, Int32) Writes a 32-bit signed integer value into unmanaged memory at a specified offset.
Public method Static member WriteInt32(Object, Int32, Int32) Writes a 32-bit signed integer value to unmanaged memory at a specified offset.
Public method Static member Supported by the XNA Framework WriteInt64(IntPtr, Int64) Writes a 64-bit signed integer value to unmanaged memory.
Public method Static member Supported by the XNA Framework WriteInt64(IntPtr, Int32, Int64) Writes a 64-bit signed integer value to unmanaged memory at a specified offset.
Public method Static member WriteInt64(Object, Int32, Int64) Writes a 64-bit signed integer value to unmanaged memory at a specified offset.
Public method Static member Supported by the XNA Framework WriteIntPtr(IntPtr, IntPtr) Writes a processor native sized integer value into unmanaged memory.
Public method Static member WriteIntPtr(IntPtr, Int32, IntPtr) Writes a processor native-sized integer value to unmanaged memory at a specified offset.
Public method Static member WriteIntPtr(Object, Int32, IntPtr) Writes a processor native sized integer value to unmanaged memory.
Public method Static member ZeroFreeBSTR Frees a BSTR Data Type pointer that was allocated using the SecureStringToBSTR method.
Public method Static member ZeroFreeCoTaskMemAnsi Frees an unmanaged string pointer that was allocated using the SecureStringToCoTaskMemAnsi method.
Public method Static member ZeroFreeCoTaskMemUnicode Frees an unmanaged string pointer that was allocated using the SecureStringToCoTaskMemUnicode method.
Public method Static member ZeroFreeGlobalAllocAnsi Frees an unmanaged string pointer that was allocated using the SecureStringToGlobalAllocAnsi method.
Public method Static member ZeroFreeGlobalAllocUnicode Frees an unmanaged string pointer that was allocated using the SecureStringToGlobalAllocUnicode method.
Top
  Name Description
Public field Static member Supported by the XNA Framework SystemDefaultCharSize Represents the default character size on the system; the default is 2 for Unicode systems and 1 for ANSI systems. This field is read-only.
Public field Static member SystemMaxDBCSCharSize Represents the maximum size of a double byte character set (DBCS) size, in bytes, for the current operating system. This field is read-only.
Top

The static methods defined on the Marshal class are essential to working with unmanaged code. Most methods defined in this class are typically used by developers who want to provide a bridge between the managed and unmanaged programming models. For example, the StringToHGlobalAnsi method copies ANSI characters from a specified string (in the managed heap) to a buffer in the unmanaged heap. It also allocates the target heap of the right size.

The common language runtime provides specific marshaling capabilities. For details on marshaling behavior, see Interop Marshaling.

The Read and Write methods in the Marshal class support both aligned and unaligned access.

The following example shows how to use various methods defined by the Marshal class.


using System;
using System.Text;
using System.Runtime.InteropServices;

public struct Point
{
    public Int32 x, y;
}


public sealed class App
{
    static void Main()
    {
        // Demonstrate the use of public static fields of the Marshal class.
        Console.WriteLine("SystemDefaultCharSize={0}, SystemMaxDBCSCharSize={1}",
            Marshal.SystemDefaultCharSize, Marshal.SystemMaxDBCSCharSize);

        // Demonstrate the use of the SizeOf method of the Marshal class.
        Console.WriteLine("Number of bytes needed by a Point object: {0}", 
            Marshal.SizeOf(typeof(Point)));
        Point p = new Point();
        Console.WriteLine("Number of bytes needed by a Point object: {0}",
            Marshal.SizeOf(p));

        // Demonstrate how to call GlobalAlloc and 
        // GlobalFree using the Marshal class.
        IntPtr hglobal = Marshal.AllocHGlobal(100);
        Marshal.FreeHGlobal(hglobal);

        // Demonstrate how to use the Marshal class to get the Win32 error 
        // code when a Win32 method fails.
        Boolean f = CloseHandle(new IntPtr(-1));
        if (!f)
        {
            Console.WriteLine("CloseHandle call failed with an error code of: {0}", 
                Marshal.GetLastWin32Error());
        }  
    }

    // This is a platform invoke prototype. SetLastError is true, which allows 
    // the GetLastWin32Error method of the Marshal class to work correctly.    
    [DllImport("Kernel32", ExactSpelling = true, SetLastError = true)]
    static extern Boolean CloseHandle(IntPtr h);

}

// This code produces the following output.
// 
// SystemDefaultCharSize=2, SystemMaxDBCSCharSize=1
// Number of bytes needed by a Point object: 8
// Number of bytes needed by a Point object: 8
// CloseHandle call failed with an error code of: 6


.NET Framework

Supported in: 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
Did you find this helpful?
(1500 characters remaining)
Community Content Add
Annotations FAQ
Marshaling with C# Pocket Reference
Marshaling with C# Pocket Reference: http://justlikeamagic.com/2010/03/09/marshaling