/CLRSUPPORTLASTERROR
(Pertahankan Kode Kesalahan Terakhir untuk Panggilan PInvoke)
/CLRSUPPORTLASTERROR
, yang aktif secara default, mempertahankan kode kesalahan terakhir fungsi yang disebut melalui mekanisme P/Invoke, yang memungkinkan Anda untuk memanggil fungsi asli di DLLS, dari kode yang dikompilasi dengan /clr
.
Sintaks
/CLRSUPPORTLASTERROR
/CLRSUPPORTLASTERROR:NO
/CLRSUPPORTLASTERROR:SYSTEMDLL
Keterangan
Mempertahankan kode kesalahan terakhir menyiratkan penurunan performa. Jika Anda tidak ingin dikenakan biaya performa untuk mempertahankan kode kesalahan terakhir, tautkan dengan menggunakan /CLRSUPPORTLASTERROR:NO
.
Anda dapat meminimalkan penalti performa dengan menautkan dengan /CLRSUPPORTLASTERROR:SYSTEMDLL
, yang hanya mempertahankan kode kesalahan terakhir untuk fungsi dalam DLL sistem.
Catatan
Mempertahankan kesalahan terakhir tidak didukung untuk fungsi yang tidak dikelola yang digunakan oleh kode CLR dalam modul yang sama.
- Untuk informasi selengkapnya, lihat
/clr
(Kompilasi Runtime Bahasa Umum).
Untuk mengatur opsi linker ini di lingkungan pengembangan Visual Studio
Buka kotak dialog Halaman Properti untuk proyek. Untuk informasi selengkapnya, lihat Mengatur properti kompilator dan build.
Pilih halaman properti Tingkat Lanjut Linker>Properti>Konfigurasi.
Ubah properti Pertahankan Kode Kesalahan Terakhir untuk Panggilan PInvoke. Pilih OK atau Terapkan untuk menyimpan perubahan Anda.
Untuk menyetel opsi linker ini secara terprogram
- Lihat AdditionalOptions.
Contoh
Sampel berikut mendefinisikan DLL asli dengan satu fungsi yang diekspor yang memodifikasi kesalahan terakhir.
// CLRSUPPORTLASTERROR_dll.cpp
// compile with: /LD
#include <windows.h>
#include <math.h>
#pragma unmanaged
__declspec(dllexport) double MySqrt(__int64 n) {
SetLastError(DWORD(-1));
return sqrt(double(n));
}
Sampel berikut menggunakan DLL, yang menunjukkan cara menggunakan /CLRSUPPORTLASTERROR
.
// CLRSUPPORTLASTERROR_client.cpp
// compile with: /clr CLRSUPPORTLASTERROR_dll.lib /link /clrsupportlasterror:systemdll
// processor: x86
#include <windows.h>
#include <wininet.h>
#include <stdio.h>
#include <math.h>
#pragma comment(lib, "wininet.lib")
double MySqrt(__int64 n);
#pragma managed
int main() {
double d = 0.0;
__int64 n = 65;
HANDLE hGroup = NULL;
GROUPID groupID;
DWORD dwSet = 127, dwGet = 37;
SetLastError(dwSet);
d = MySqrt(n);
dwGet = GetLastError();
if (dwGet == DWORD(-1))
printf_s("GetLastError for application call succeeded (%d).\n",
dwGet);
else
printf_s("GetLastError for application call failed (%d).\n",
dwGet);
hGroup = FindFirstUrlCacheGroup(0, CACHEGROUP_SEARCH_ALL,
0, 0, &groupID, 0);
dwGet = GetLastError();
if (dwGet == 183)
printf_s("GetLastError for system call succeeded (%d).\n",
dwGet);
else
printf_s("GetLastError for system call failed (%d).\n",
dwGet);
}
GetLastError for application call failed (127).
GetLastError for system call succeeded (183).
Baca juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk