/CLRSUPPORTLASTERROR
(Conserver le dernier code d’erreur pour les appels PInvoke)
/CLRSUPPORTLASTERROR
, qui est activé par défaut, conserve le dernier code d’erreur des fonctions appelées via le mécanisme P/Invoke, ce qui vous permet d’appeler des fonctions natives dans DLLS, à partir de code compilé avec /clr
.
Syntaxe
/CLRSUPPORTLASTERROR
/CLRSUPPORTLASTERROR:NO
/CLRSUPPORTLASTERROR:SYSTEMDLL
Notes
La conservation du dernier code d’erreur implique une diminution des performances. Si vous ne souhaitez pas entraîner le coût de performances de conservation du dernier code d’erreur, liez-le à l’aide /CLRSUPPORTLASTERROR:NO
de .
Vous pouvez réduire la pénalité de performances en liant avec /CLRSUPPORTLASTERROR:SYSTEMDLL
, qui conserve uniquement le dernier code d’erreur pour les fonctions dans les DLL système.
Remarque
La conservation de la dernière erreur n’est pas prise en charge pour les fonctions non managées consommées par le code CLR dans le même module.
- Pour plus d’informations, consultez
/clr
(Compilation Common Language Runtime).
Pour définir cette option de l'éditeur de liens dans l'environnement de développement Visual Studio
Ouvrez la boîte de dialogue Pages de propriétés du projet. Pour plus d’informations, consultez Définir les propriétés du compilateur et de la génération.
Sélectionnez la page de propriétés Avancées de l’Éditeur >de propriétés>de configuration.
Modifiez le dernier code d’erreur pour la propriété PInvoke Calls . Choisissez OK ou Appliquer pour enregistrer vos modifications.
Pour définir cette option de l'éditeur de liens par programmation
- Consultez AdditionalOptions.
Exemples
L’exemple suivant définit une DLL native avec une fonction exportée qui modifie la dernière erreur.
// 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));
}
L’exemple suivant utilise la DLL, montrant comment utiliser /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).
Voir aussi
Informations de référence sur l’éditeur de liens MSVC
Options de l’éditeur de liens MSVC