/CLRSUPPORTLASTERROR (Zachowaj kod ostatniego błędu dla wywołań PInvoke)
/CLRSUPPORTLASTERROR, który jest domyślnie zachowuje ostatni kod błędu w funkcji wywołanej za pomocą mechanizmu P i Invoke, dzięki czemu można wywoływać funkcje macierzystego w bibliotekach DLL, od kod skompilowany z /clr.
/CLRSUPPORTLASTERROR{:NO | SYSTEMDLL}
Uwagi
Zachowywanie kod ostatniego błędu oznacza spadek wydajności. Jeśli nie chcesz ponieść wpływ na wydajność zachowania kod ostatniego błędu, połączyć z /CLRSUPPORTLASTERROR:NO.
Można zminimalizować wpływ na wydajność przez powiązanie z /CLRSUPPORTLASTERROR:SYSTEMDLL, który zachowuje ona tylko kod ostatniego błędu dla funkcji w systemowej biblioteki dll. Biblioteka DLL systemu określa się jako jedną z następujących czynności:
ACLUI.BIBLIOTEKA DLL |
ACTIVEDS.BIBLIOTEKA DLL |
ADPTIF.BIBLIOTEKA DLL |
ADVAPI32.BIBLIOTEKA DLL |
ASYCFILT.BIBLIOTEKA DLL |
AUTHZ.BIBLIOTEKA DLL |
AVICAP32.BIBLIOTEKA DLL |
AVIFIL32.BIBLIOTEKA DLL |
SZAFKA.BIBLIOTEKA DLL |
CLUSAPI.BIBLIOTEKA DLL |
COMCTL32.BIBLIOTEKA DLL |
PLIK COMDLG32.BIBLIOTEKA DLL |
COMSVCS.BIBLIOTEKA DLL |
CREDUI.BIBLIOTEKA DLL |
OKREŚLONY PRZEZ CRYPT32.BIBLIOTEKA DLL |
CRYPTNET.BIBLIOTEKA DLL |
CRYPTUI.BIBLIOTEKA DLL |
D3D8THK.BIBLIOTEKA DLL |
DBGENG.BIBLIOTEKA DLL |
DBGHELP.BIBLIOTEKA DLL |
DCIMAN32.BIBLIOTEKA DLL |
DNSAPI.BIBLIOTEKA DLL |
DSPROP.BIBLIOTEKA DLL |
DSUIEXT.BIBLIOTEKA DLL |
GDI32.BIBLIOTEKA DLL |
GLU32.BIBLIOTEKA DLL |
HLINK.BIBLIOTEKA DLL |
ICM32.BIBLIOTEKA DLL |
IMAGEHLP.BIBLIOTEKA DLL |
IMM32.BIBLIOTEKA DLL |
IPHLPAPI.BIBLIOTEKA DLL |
IPROP.BIBLIOTEKA DLL |
KERNEL32.BIBLIOTEKA DLL |
KSUSER.BIBLIOTEKA DLL |
LOADPERF.BIBLIOTEKA DLL |
LZ32.BIBLIOTEKA DLL |
BIBLIOTEKA MAPI32.BIBLIOTEKA DLL |
BIBLIOTECE MGMTAPI.BIBLIOTEKA DLL |
MOBSYNC.BIBLIOTEKA DLL |
USŁUGA MPR.BIBLIOTEKA DLL |
MPRAPI.BIBLIOTEKA DLL |
MQRT.BIBLIOTEKA DLL |
MSACM32.BIBLIOTEKA DLL |
MSCMS.BIBLIOTEKA DLL |
MSI.BIBLIOTEKA DLL |
MSIMG32.BIBLIOTEKA DLL |
MSRATING.BIBLIOTEKA DLL |
MSTASK.BIBLIOTEKA DLL |
MSVFW32.BIBLIOTEKA DLL |
MSWSOCK.BIBLIOTEKA DLL |
MTXEX.BIBLIOTEKA DLL |
NDDEAPI.BIBLIOTEKA DLL |
NETAPI32.BIBLIOTEKA DLL |
NPPTOOLS.BIBLIOTEKA DLL |
PLIKU NTDSAPI.BIBLIOTEKA DLL |
NTDSBCLI.BIBLIOTEKA DLL |
NTMSAPI.BIBLIOTEKA DLL |
ODBC32.BIBLIOTEKA DLL |
ODBCBCP.BIBLIOTEKA DLL |
OLE32.BIBLIOTEKA DLL |
OLEACC.BIBLIOTEKA DLL |
OLEAUT32.BIBLIOTEKA DLL |
OLEDLG.BIBLIOTEKA DLL |
OPENGL32.BIBLIOTEKA DLL |
PDH.BIBLIOTEKA DLL |
PLIKU POWRPROF.BIBLIOTEKA DLL |
QOSNAME.BIBLIOTEKA DLL |
KWERENDA.BIBLIOTEKA DLL |
RASAPI32.BIBLIOTEKA DLL |
RASDLG.BIBLIOTEKA DLL |
RASSAPI.BIBLIOTEKA DLL |
RESUTILS.BIBLIOTEKA DLL |
RICHED20.BIBLIOTEKA DLL |
RPCNS4.BIBLIOTEKA DLL |
RPCRT4.BIBLIOTEKA DLL |
RTM.BIBLIOTEKA DLL |
RTUTILS.BIBLIOTEKA DLL |
SCARDDLG.BIBLIOTEKA DLL |
SECUR32.BIBLIOTEKA DLL |
SENSAPI.BIBLIOTEKA DLL |
BRAKUJE SETUPAPI.BIBLIOTEKA DLL |
SFC.BIBLIOTEKA DLL |
SHELL32.BIBLIOTEKA DLL |
SHFOLDER.BIBLIOTEKA DLL |
SHLWAPI.BIBLIOTEKA DLL |
SISBKUP.BIBLIOTEKA DLL |
SNMPAPI.BIBLIOTEKA DLL |
SRCLIENT.BIBLIOTEKA DLL |
STI.BIBLIOTEKA DLL |
TAPI32.BIBLIOTEKA DLL |
RUCH W SIECI.BIBLIOTEKA DLL |
ADRES URL.BIBLIOTEKA DLL |
URLMON.BIBLIOTEKA DLL |
USER32.BIBLIOTEKA DLL |
USERENV.BIBLIOTEKA DLL |
USP10.BIBLIOTEKA DLL |
UXTHEME.BIBLIOTEKA DLL |
VDMDBG.BIBLIOTEKA DLL |
WERSJA.BIBLIOTEKA DLL |
PROGRAMU WINFAX.BIBLIOTEKA DLL |
USŁUGI WINHTTP.BIBLIOTEKA DLL |
USŁUGI WININET.BIBLIOTEKA DLL |
WINMM.BIBLIOTEKA DLL |
WINSCARD.BIBLIOTEKA DLL |
WINTRUST.BIBLIOTEKA DLL |
WLDAP32.BIBLIOTEKA DLL |
WOW32.BIBLIOTEKA DLL |
WS2_32.DLL |
WSNMP32.BIBLIOTEKA DLL |
WSOCK32.BIBLIOTEKA DLL |
WTSAPI32.BIBLIOTEKA DLL |
XOLEHLP.BIBLIOTEKA DLL |
[!UWAGA]
Zachowywanie ostatniego błędu nie jest obsługiwana dla niezarządzanego funkcje, które są zużywane według kodu CLR, w tym samym module.
- Aby uzyskać dodatkowe informacje, zobacz /clr (Kompilacja środowiska uruchomieniowego języka wspólnego).
Aby ustawić opcję konsolidatora w środowisku programowania Visual Studio
Otwórz okno dialogowe Strony właściwości projektu.Aby uzyskać szczegółowe informacje, zobacz Konfigurowanie właściwości projektu programu Visual C++.
Kliknij folder Konsolidator.
Kliknij stronę właściwości Wiersz polecenia.
Wpisz opcję w Dodatkowe opcje pole.
Aby programowo ustawić opcję konsolidatora
- Zobacz AdditionalOptions.
Przykład
Poniższy przykład definiuje macierzystego DLL z jednej funkcji eksportowanych, która modyfikuje ostatni błąd.
// 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));
}
Poniższy przykład pobiera DLL, ukazujące sposób korzystania /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);
}