/CLRSUPPORTLASTERROR
(Mantieni ultimo codice di errore per le chiamate PInvoke)
/CLRSUPPORTLASTERROR
, che è attivato per impostazione predefinita, mantiene l'ultimo codice di errore delle funzioni chiamate tramite il meccanismo P/Invoke, che consente di chiamare funzioni native in DLLS, dal codice compilato con /clr
.
Sintassi
/CLRSUPPORTLASTERROR
/CLRSUPPORTLASTERROR:NO
/CLRSUPPORTLASTERROR:SYSTEMDLL
Osservazioni:
Il mantenimento dell'ultimo codice di errore implica una riduzione delle prestazioni. Se non si vuole sostenere il costo delle prestazioni per mantenere l'ultimo codice di errore, collegare tramite /CLRSUPPORTLASTERROR:NO
.
È possibile ridurre al minimo la riduzione delle prestazioni collegando con /CLRSUPPORTLASTERROR:SYSTEMDLL
, che mantiene solo l'ultimo codice di errore per le funzioni nelle DLL di sistema.
Nota
Il mantenimento dell'ultimo errore non è supportato per le funzioni non gestite utilizzate dal codice CLR nello stesso modulo.
- Per altre informazioni, vedere
/clr
(Compilazione Common Language Runtime).
Per impostare questa opzione del linker nell'ambiente di sviluppo di Visual Studio
Aprire la finestra di dialogo Pagine delle proprietà per il progetto. Per altre informazioni, vedere Impostare le proprietà del compilatore e della compilazione.
Selezionare la pagina delle>proprietà Proprietà di configurazione Linker>Avanzate.
Modificare la proprietà Preserve Last Error Code for PInvoke Calls .Modify the Preserve Last Error Code for PInvoke Calls property. Scegliere OK o Applica per salvare le modifiche.
Per impostare l'opzione del linker a livello di codice
- Vedere AdditionalOptions.
Esempi
L'esempio seguente definisce una DLL nativa con una funzione esportata che modifica l'ultimo errore.
// 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));
}
Nell'esempio seguente viene utilizzata la DLL, che illustra come usare /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).
Vedi anche
Informazioni di riferimento sul linker MSVC
Opzioni del linker MSVC