/ CLRSUPPORTLASTERROR (preservar último código de erro para chamadas de PInvoke)
/CLRSUPPORTLASTERROR, que é ativada por padrão, preserva o último código de erro das funções chamadas pelo mecanismo de P/Invoke, que permite que você chamar funções nativas em DLLS, do código compilado com /clr.
/CLRSUPPORTLASTERROR{:NO | SYSTEMDLL}
Comentários
Preservar o último código de erro implica uma diminuir no desempenho.Se desejar aumentam o impacto no desempenho de preservar o último código de erro, vincular com /CLRSUPPORTLASTERROR:NO.
Você pode minimizar o impacto no desempenho por meio da vinculação com /CLRSUPPORTLASTERROR:SYSTEMDLL, que preserva apenas último código de erro para as funções em DLLs do sistema. Uma DLL de sistema é definido sistema autônomo um dos seguintes procedimentos:
ACLUI.DLL |
ACTIVEDS.DLL |
ADPTIF.DLL |
ADVAPI32.DLL |
ASYCFILT.DLL |
AUTHZ.DLL |
AVICAP32.DLL |
AVIFIL32.DLL |
CABINET.DLL |
CLUSAPI.DLL |
COMCTL32.DLL |
COMDLG32.DLL |
COMSVCS.DLL |
CREDUI.DLL |
CRYPT32.DLL |
CRYPTNET.DLL |
CRYPTUI.DLL |
D3D8THK.DLL |
DBGENG.DLL |
DBGHELP.DLL |
DCIMAN32.DLL |
DNSAPI.DLL |
DSPROP.DLL |
DSUIEXT.DLL |
GDI32.DLL |
GLU32.DLL |
HLINK.DLL |
ICM32.DLL |
IMAGEHLP.DLL |
IMM32.DLL |
IPHLPAPI.DLL |
IPROP.DLL |
KERNEL32.DLL |
KSUSER.DLL |
LOADPERF.DLL |
LZ32.DLL |
MAPI32.DLL |
MGMTAPI.DLL |
MOBSYNC.DLL |
MPR.DLL |
MPRAPI.DLL |
MQRT.DLL |
MSACM32.DLL |
MSCMS.DLL |
MSI.DLL |
MSIMG32.DLL |
MSRATING.DLL |
MSTASK.DLL |
MSVFW32.DLL |
MSWSOCK.DLL |
MTXEX.DLL |
NDDEAPI.DLL |
NETAPI32.DLL |
NPPTOOLS.DLL |
NTDSAPI.DLL |
NTDSBCLI.DLL |
NTMSAPI.DLL |
ODBC32.DLL |
ODBCBCP.DLL |
OLE32.DLL |
OLEACC.DLL |
OLEAUT32.DLL |
OLEDLG.DLL |
OPENGL32.DLL |
PDH.DLL |
POWRPROF.DLL |
QOSNAME.DLL |
consulta.DLL |
RASAPI32.DLL |
RASDLG.DLL |
RASSAPI.DLL |
RESUTILS.DLL |
RICHED20.DLL |
RPCNS4.DLL |
RPCRT4.DLL |
RTM.DLL |
RTUTILS.DLL |
SCARDDLG.DLL |
SECUR32.DLL |
SENSAPI.DLL |
SETUPAPI.DLL |
SFC.DLL |
SHELL32.DLL |
SHFOLDER.DLL |
SHLWAPI.DLL |
SISBKUP.DLL |
SNMPAPI.DLL |
SRCLIENT.DLL |
STI.DLL |
TAPI32.DLL |
tráfego.DLL |
URL.DLL |
URLMON.DLL |
USER32.DLL |
USERENV.DLL |
USP10.DLL |
UXTHEME.DLL |
VDMDBG.DLL |
versão.DLL |
WINFAX.DLL |
WINHTTP.DLL |
WININET.DLL |
WINMM.DLL |
WINSCARD.DLL |
WINTRUST.DLL |
WLDAP32.DLL |
WOW32.DLL |
WS2_32.DLL |
WSNMP32.DLL |
WSOCK32.DLL |
WTSAPI32.DLL |
XOLEHLP.DLL |
Observação: |
---|
Preservar o último erro não há suporte para funções não gerenciadas são consumidas por código de CLR no mesmo módulo. |
- Para obter mais informações, consulte /CLR (Common linguagem tempo de execução compilação).
Para conjunto esta opção de vinculador no ambiente de desenvolvimento do Visual Studio
em aberto propriedade Páginas caixa de diálogo.Para obter detalhes, consulte Definindo propriedades do Visual C++ projeto.
clicar no Vinculador pasta.
clicar no Linha de comando página de propriedades.
Digite a opção para o Opções adicionais box.
Para conjunto esta opção de vinculador programaticamente
Exemplo
O exemplo a seguir define uma DLL nativa com uma função exportada que modifica o último erro.
// 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));
}
O exemplo a seguir consome DLL, que demonstram como usar /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).