Udostępnij za pośrednictwem


/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 ustawić opcję konsolidatora w środowisku programowania Visual Studio

  1. 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++.

  2. Kliknij folder Konsolidator.

  3. Kliknij stronę właściwości Wiersz polecenia.

  4. Wpisz opcję w Dodatkowe opcje pole.

Aby programowo ustawić opcję konsolidatora

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);
}
  

Zobacz też

Informacje

Ustawianie opcji konsolidatora

Opcje konsolidatora