/ CLRSUPPORTLASTERROR (Zachowaj ostatni kod błędu dla wywołania funkcji PInvoke)

/CLRSUPPORTLASTERROR, który jest domyślnie zachowuje kod ostatniego błędu w funkcji wywołanej za pomocą mechanizmu P/Invoke pozwala wywoływać funkcje macierzystym w bibliotekach DLL, kod skompilowany z /clr.

/CLRSUPPORTLASTERROR{:NO | SYSTEMDLL}

Uwagi

Zachowywanie kod ostatniego błędu pociąga za sobą spadek wydajności.Jeśli nie ma ponieść wpływ na wydajność zachowania kod ostatniego błędu, połącz się z /CLRSUPPORTLASTERROR:NO.

Można zminimalizować wpływ na wydajność, łącząc się z /CLRSUPPORTLASTERROR:SYSTEMDLL, który zachowuje ona tylko kod ostatniego błędu dla funkcji w systemowej biblioteki DLL.Biblioteki DLL systemu jest zdefiniowana 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

SZAFKI.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

PLIK MAPI32.BIBLIOTEKA DLL

W BIBLIOTECE MGMTAPI.BIBLIOTEKA DLL

POLECENIE 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

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

KWERENDY.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

POMOCĄ NARZĘDZI RTUTILS.BIBLIOTEKA DLL

SCARDDLG.BIBLIOTEKA DLL

SECUR32.BIBLIOTEKA DLL

SENSAPI.BIBLIOTEKA DLL

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ć tę opcję programu łączącego w środowisku projektowym programu Visual Studio

  1. Otwórz projekt Stron właściwości okno dialogowe.Aby uzyskać szczegółowe informacje, zobacz Ustawianie właściwości projektu Visual C++.

  2. Kliknij przycisk program łączący folder.

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

  4. Wpisz opcję do Dodatkowe opcje pole.

Aby ustawić tę opcję linker programowo

Przykład

Poniższy przykładowy definiuje macierzystym DLL z jednego wyeksportowanej funkcji, 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 używa biblioteki DLL, wykazujące, jak używać /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 Linker

Opcje Linker