Marshal.GetLastWin32Error Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Restituisce il codice errore restituito dall'ultima funzione non gestita chiamata mediante una chiamata platform invoke con il flag SetLastError impostato.
public:
static int GetLastWin32Error();
[System.Security.SecurityCritical]
public static int GetLastWin32Error ();
public static int GetLastWin32Error ();
[<System.Security.SecurityCritical>]
static member GetLastWin32Error : unit -> int
static member GetLastWin32Error : unit -> int
Public Shared Function GetLastWin32Error () As Integer
Restituisce
Ultimo codice di errore impostato da una chiamata alla funzione Win32 SetLastError.
- Attributi
Esempio
Nell'esempio seguente viene chiamato il GetLastWin32Error
metodo . L'esempio illustra prima di tutto la chiamata al metodo senza errori presenti e quindi illustra la chiamata al metodo con un errore presente.
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 normal parameters.
Console.WriteLine("Calling Win32 MessageBox without error...");
Win32.MessageBox(new IntPtr(0), "Press OK...", "Press OK Dialog", 0);
// Get the last error and display it.
int error = Marshal.GetLastWin32Error();
Console.WriteLine("The last Win32 Error was: " + error);
// 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.
error = Marshal.GetLastWin32Error();
Console.WriteLine("The last Win32 Error was: " + error);
}
static void Main(string[] args)
{
Run();
}
}
// This code example displays the following to the console:
//
// Calling Win32 MessageBox without error...
// The last Win32 Error was: 0
// Calling Win32 MessageBox with error...
// The last Win32 Error was: 1400
Imports System.Runtime.InteropServices
Module 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)> _
Function MessageBox(ByVal hwnd As IntPtr, ByVal text As String, ByVal caption As String, ByVal type As UInt32) As Integer
End Function
End Module
Module Program
Sub Run()
' Call the MessageBox with normal parameters.
Console.WriteLine("Calling Win32 MessageBox without error...")
Win32.MessageBox(New IntPtr(0), "Press OK...", "Press OK Dialog", 0)
' Get the last error and display it.
Dim errorVal As Integer
errorVal = Marshal.GetLastWin32Error()
Console.WriteLine("The last Win32 Error was: " + errorVal)
' 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.
errorVal = Marshal.GetLastWin32Error()
Console.WriteLine("The last Win32 Error was: " + errorVal)
End Sub
Sub Main(ByVal args() As String)
Run()
End Sub
End Module
' This code example displays the following to the console:
'
' Calling Win32 MessageBox without error...
' The last Win32 Error was: 0
' Calling Win32 MessageBox with error...
' The last Win32 Error was: 1400
Commenti
Nei sistemi Windows espone GetLastWin32Error la funzione GetLastError Win32 da Kernel32.DLL. Questo metodo esiste perché non è affidabile eseguire una chiamata di chiamata alla piattaforma diretta per GetLastError
ottenere queste informazioni. Se si vuole accedere a questo codice di errore, è necessario chiamare GetLastWin32Error anziché scrivere la definizione di richiamare la piattaforma GetLastError
e chiamarla. Common Language Runtime può effettuare chiamate interne alle API che sovrascrivono la GetLastError
gestione dal sistema operativo.
È possibile usare questo metodo per ottenere codici di errore solo se si applica alla System.Runtime.InteropServices.DllImportAttribute firma del metodo e impostare il DllImportAttribute.SetLastError campo su true
. Il processo per questo varia a seconda del linguaggio di origine usato: C# e C++ sono false
per impostazione predefinita, ma l'istruzione Declare
in Visual Basic è true
.
Esiste una differenza nel comportamento del GetLastWin32Error
metodo in .NET Core e .NET Framework quando DllImportAttribute.SetLastError è true
. In .NET Framework il GetLastWin32Error
metodo può conservare le informazioni sugli errori da una chiamata P/Invoke alla successiva. In .NET Core le informazioni sull'errore vengono cancellate prima della chiamata P/Invoke e rappresenta GetLastWin32Error
solo le informazioni sull'errore dell'ultima chiamata al metodo.
Nelle versioni successive e .NET 6 questo metodo è funzionalmente equivalente a GetLastPInvokeError, denominato per riflettere meglio la finalità dell'API e la sua natura multipiattaforma. GetLastPInvokeError deve essere preferito rispetto GetLastWin32Errora .