/CLRSUPPORTLASTERROR
(PInvoke 호출에 대한 마지막 오류 코드 유지)
기본적으로 설정되는 /CLRSUPPORTLASTERROR
는 P/Invoke 메커니즘을 통해 호출되는 함수의 마지막 오류 코드를 유지합니다. 이를 통해 /clr
로 컴파일된 코드에서 DLLS의 네이티브 함수를 호출할 수 있습니다.
구문
/CLRSUPPORTLASTERROR
/CLRSUPPORTLASTERROR:NO
/CLRSUPPORTLASTERROR:SYSTEMDLL
설명
마지막 오류 코드를 유지하면 성능이 저하됩니다. 마지막 오류 코드를 유지하는 데 따른 성능 비용이 발생하지 않으려면 다음을 사용하여 /CLRSUPPORTLASTERROR:NO
연결합니다.
시스템 DLL의 함수에 대한 마지막 오류 코드만 유지하는 연결 /CLRSUPPORTLASTERROR:SYSTEMDLL
하여 성능 저하를 최소화할 수 있습니다.
참고 항목
마지막 오류 유지는 동일한 모듈의 CLR 코드에서 사용되는 관리되지 않는 함수에는 지원되지 않습니다.
- 자세한 내용은 (공용 언어 런타임 컴파일)을 참조
/clr
하세요.
Visual Studio 개발 환경에서 이 링커 옵션을 설정하려면
프로젝트에 대한 속성 페이지 대화 상자를 엽니다. 자세한 내용은 컴파일러 및 빌드 속성 설정을 참조 하세요.
구성 속성>링커>고급 속성 페이지를 선택합니다.
PInvoke 호출 속성에 대한 마지막 오류 코드 유지를 수정합니다. 확인을 선택하거나 적용을 선택하여 변경 내용을 저장합니다.
프로그래밍 방식으로 이 링커 옵션을 설정하려면
- AdditionalOptions을(를) 참조하세요.
예제
다음 샘플에서는 마지막 오류를 수정하는 하나의 내보낸 함수를 사용하여 네이티브 DLL을 정의합니다.
// 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));
}
다음 샘플에서는 DLL을 사용하여 사용하는 /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).