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)

public static int GetHRForLastWin32Error ()
public static int GetHRForLastWin32Error ()
public static function GetHRForLastWin32Error () : int

Return Value

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)]
    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 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

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

.NET Framework

Supported in: 2.0, 1.1, 1.0

Community Additions