Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
GetHRForLastWin32Error Method
Collapse the table of content
Expand the table of content

Marshal.GetHRForLastWin32Error Method

Returns the HRESULT corresponding to the last error incurred by Win32 code executed using Marshal.

Namespace:  System.Runtime.InteropServices
Assembly:  mscorlib (in mscorlib.dll)

[SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
public static int GetHRForLastWin32Error()

Return Value

Type: System.Int32
The HRESULT corresponding to the last Win32 error code.

The target function must have had the setLastError metadata flag set. For example, the SetLastError field of the System.Runtime.InteropServices.DllImportAttribute must be true. The process for this varies depending upon the source language used: C# and C++ are false by default, but the Declare statement in Visual Basic is true.


This method uses SecurityAction.LinkDemand to prevent it from being called from untrusted code; only the immediate caller is required to have SecurityPermissionAttribute.UnmanagedCode permission. If your code can be called from partially trusted code, do not pass user input to Marshal class methods without validation. For important limitations on using the LinkDemand member, see Demand vs. LinkDemand.

The following code example demonstrates how to retrieve an HRESULT corresponding to a Win32 error code using the GetHRForLastWin32Error method.

using System;
using System.Runtime.InteropServices;

internal class Win32
    // Use DllImportAttribute to inport the Win32 MessageBox 
    // function.  Set the SetLastError flag to true to allow 
    // the function to set the Win32 error.
    [DllImportAttribute("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
    public static extern int MessageBox(IntPtr hwnd, String text, String caption, uint type);


class Program

    static void Run()

        // Call the MessageBox with an invalid window handle to 
        // produce a Win32 error.

        Console.WriteLine("Calling Win32 MessageBox with error...");

        Win32.MessageBox(new IntPtr(123132), "Press OK...", "Press OK Dialog", 0);

        // Get the last error and display it. 

        int HRESULT = Marshal.GetHRForLastWin32Error();

        Console.WriteLine("The last Win32 Error was: " + HRESULT);

    static void Main(string[] args)
// This code example displays the following to the console:  
// Calling Win32 MessageBox with error... 
// The last Win32 Error was: -2147023496

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

.NET Framework

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

Community Additions

© 2015 Microsoft