DllImportAttribute.SetLastError Bidang
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Menunjukkan apakah penerima panggilan menetapkan kesalahan (SetLastError
di Windows atau errno
di platform lain) sebelum kembali dari metode yang diatribusikan.
public: bool SetLastError;
public bool SetLastError;
val mutable SetLastError : bool
Public SetLastError As Boolean
Nilai Bidang
Contoh
Dalam beberapa kasus, pengembang Visual Basic menggunakan DllImportAttribute, alih-alih menggunakan Declare
pernyataan , untuk menentukan fungsi DLL dalam kode terkelola.
SetLastError Mengatur bidang adalah salah satu kasus tersebut.
[DllImport("user32.dll", SetLastError = true)]
int MessageBoxA(IntPtr hWnd, String^ Text,
String^ Caption, unsigned int Type);
internal static class NativeMethods
{
[DllImport("user32.dll", SetLastError = true)]
internal static extern int MessageBoxA(
IntPtr hWnd, string lpText, string lpCaption, uint uType);
}
Friend Class NativeMethods
<DllImport("user32.dll", SetLastError:=True)>
Friend Shared Function MessageBoxA(hWnd As IntPtr, lpText As String,
lpCaption As String, uType As UInteger) As Integer
End Function
End Class
Keterangan
true
untuk menunjukkan bahwa penerima panggilan akan mengatur kesalahan melalui SetLastError
pada Windows atau errno
di platform lain; jika tidak, false
. Default adalah false
.
Jika bidang ini diatur ke true
, runtime marshaler memanggil GetLastError
atau errno
dan menyimpan cache nilai yang dikembalikan untuk mencegahnya ditimpa oleh panggilan API lainnya.
Anda dapat mengambil kode kesalahan dengan memanggil GetLastPInvokeError pada .NET 6.0 ke atas atau GetLastWin32Error di .NET 5 ke bawah atau .NET Framework.
Pada .NET, informasi kesalahan dibersihkan (diatur ke 0
) sebelum memanggil penerima panggilan ketika bidang ini diatur ke true
. Pada .NET Framework, informasi kesalahan tidak dihapus.
Ini berarti bahwa informasi kesalahan yang dikembalikan oleh GetLastPInvokeError dan GetLastWin32Error di .NET hanya mewakili informasi kesalahan dari p/invoke terakhir dengan DllImportAttribute.SetLastError diatur ke true
. Pada .NET Framework, informasi kesalahan dapat bertahan dari satu p/panggil ke p berikutnya.