UWP(유니버설 Windows 플랫폼) 앱을 빌드할 때는 CRT(많은 C 런타임) 함수를 사용할 수 없습니다. 경우에 따라 해결 방법을 사용할 수 있습니다. 예를 들어 Windows 런타임 또는 Win32 API를 사용할 수 있습니다. 다른 경우에는 해당 기능 또는 지원 API를 UWP 앱에 적용할 수 없으므로 CRT 함수가 금지되었습니다. Windows 런타임에 지원되는 대체 방법을 찾으려면 UWP 앱에서 Windows API에 대한 대안을 참조하세요.
다음 표에서는 UWP 앱을 빌드할 때 사용할 수 없는 CRT 함수를 나열합니다. 적용되는 모든 해결 방법을 나타냅니다.
지원되지 않는 CRT 함수
기능 | 설명 | 해결 방법 |
---|---|---|
_beep
_sleep
_seterrormode
|
이러한 함수는 이전 버전의 CRT에서 사용되지 않았습니다. 또한 해당 Win32 API는 UWP 앱에 사용할 수 없습니다. | 해결 방법이 없습니다. |
chdir
_chdrive
getcwd
|
이러한 함수는 구식이거나 스레드에 안전하지 않습니다. |
_chdir , _getcwd 및 관련 함수를 사용합니다. |
_cgets
_cgets_s
_cgetws
_cgetws_s
_cprintf
_cprintf_l
_cprintf_p
_cprintf_p_l
_cprintf_s
_cprintf_s_l
_cputs
_cputws
_cscanf
_cscanf_l
_cscanf_s
_cscanf_s_l
_cwait
_cwprintf
_cwprintf_l
_cwprintf_p
_cwprintf_p_l
_cwprintf_s
_cwprintf_s_l
_cwscanf
_cwscanf_l
_cwscanf_s
_cwscanf_s_l
_vcprintf
_vcprintf_l
_vcprintf_p
_vcprintf_p_l
_vcprintf_s
_vcprintf_s_l
_vcwprintf
_vcwprintf_l
_vcwprintf_p
_vcwprintf_p_l
_vcwprintf_s
_vcwprintf_s_l
_getch
_getch_nolock
_getche
_getche_nolock
_getwch
_getwch_nolock
_getwche
_getwche_nolock
_putch
_putch_nolock
_putwch
_putwch_nolock
_ungetch
_ungetch_nolock
_ungetwch
_ungetwch_nolock
_kbhit
kbhit
putch
cgets
cprintf
cputs
cscanf
cwait
getch
getche
ungetch
|
이러한 콘솔 I/O 함수는 GUI 기반 UWP 앱에서 사용할 수 없습니다. | UWP 콘솔 앱은 이러한 함수를 사용할 수 있습니다. 자세한 내용은 유니버설 Windows 플랫폼 콘솔 앱 만들기를 참조하세요. |
getpid
_getpid
|
이러한 함수는 사용되지 않습니다. | Win32 API GetCurrentProcessId 를 사용합니다. |
_getdiskfree |
사용할 수 없음. | Win32 API GetDiskFreeSpaceExW 를 사용합니다. |
_getdrive
_getdrives
|
해당 API는 UWP 앱에 사용할 수 없습니다. | 해결 방법이 없습니다. |
_inp
_inpd
_inpw
_outp
_outpd
_outpw
inp
inpd
inpw
outp
outpd
outpw
|
포트 IO는 UWP 앱에서 지원되지 않습니다. | 해결 방법이 없습니다. |
_ismbcalnum
_ismbcalnum_l
_ismbcalpha
_ismbcalpha_l
_ismbcdigit
_ismbcdigit_l
_ismbcgraph
_ismbcgraph_l
_ismbchira
_ismbchira_l
_ismbckata
_ismbckata_l
_ismbcl0
_ismbcl0_l
_ismbcl1
_ismbcl1_l
_ismbcl2
_ismbcl2_l
_ismbclegal
_ismbclegal_l
_ismbclower
_ismbclower_l
_ismbcprint
_ismbcprint_l
_ismbcpunct
_ismbcpunct_l
_ismbcspace
_ismbcspace_l
_ismbcsymbol
_ismbcsymbol_l
_ismbcupper
_ismbcupper_l
_mbbtombc
_mbbtombc_l
_mbbtype
_mbbtype_l
_mbccpy
_mbccpy_l
_mbccpy_s
_mbccpy_s_l
_mbcjistojms
_mbcjistojms_l
_mbcjmstojis
_mbcjmstojis_l
_mbclen
_mbclen_l
_mbctohira
_mbctohira_l
_mbctokata
_mbctokata_l
_mbctolower
_mbctolower_l
_mbctombb
_mbctombb_l
_mbctoupper
_mbctoupper_l
_mbsbtype
_mbsbtype_l
_mbscat
_mbscat_l
_mbscat_s
_mbscat_s_l
_mbschr
_mbschr_l
_mbscmp
_mbscmp_l
_mbscoll
_mbscoll_l
_mbscpy
_mbscpy_l
_mbscpy_s
_mbscpy_s_l
_mbscspn
_mbscspn_l
_mbsdec
_mbsdec_l
_mbsicmp
_mbsicmp_l
_mbsicoll
_mbsicoll_l
_mbsinc
_mbsinc_l
_mbslen
_mbslen_l
_mbslwr
_mbslwr_l
_mbslwr_s
_mbslwr_s_l
_mbsnbcat
_mbsnbcat_l
_mbsnbcat_s
_mbsnbcat_s_l
_mbsnbcmp
_mbsnbcmp_l
_mbsnbcnt
_mbsnbcnt_l
_mbsnbcoll
_mbsnbcoll_l
_mbsnbcpy
_mbsnbcpy_l
_mbsnbcpy_s
_mbsnbcpy_s_l
_mbsnbicmp
_mbsnbicmp_l
_mbsnbicoll
_mbsnbicoll_l
_mbsnbset
_mbsnbset_l
_mbsnbset_s
_mbsnbset_s_l
_mbsncat
_mbsncat_l
_mbsncat_s
_mbsncat_s_l
_mbsnccnt
_mbsnccnt_l
_mbsncmp
_mbsncmp_l
_mbsncoll
_mbsncoll_l
_mbsncpy
_mbsncpy_l
_mbsncpy_s
_mbsncpy_s_l
_mbsnextc
_mbsnextc_l
_mbsnicmp
_mbsnicmp_l
_mbsnicoll
_mbsnicoll_l
_mbsninc
_mbsninc_l
_mbsnlen
_mbsnlen_l
_mbsnset
_mbsnset_l
_mbsnset_s
_mbsnset_s_l
_mbspbrk
_mbspbrk_l
_mbsrchr
_mbsrchr_l
_mbsrev
_mbsrev_l
_mbsset
_mbsset_l
_mbsset_s
_mbsset_s_l
_mbsspn
_mbsspn_l
_mbsspnp
_mbsspnp_l
_mbsstr
_mbsstr_l
_mbstok
_mbstok_l
_mbstok_s
_mbstok_s_l
_mbsupr
_mbsupr_l
_mbsupr_s
_mbsupr_s_l
is_wctype
|
다중 바이트 문자열은 UWP 앱에서 지원되지 않습니다. | 대신 유니코드 문자열을 사용합니다. |
_pclose
_pipe
_popen
_wpopen
|
파이프 기능은 UWP 앱에서 사용할 수 없습니다. | 해결 방법이 없습니다. |
_resetstkoflw |
UWP 앱에는 Win32 API를 지원할 수 없습니다. | 해결 방법이 없습니다. |
_getsystime
_setsystime
|
이전 CRT 버전에서는 사용되지 않는 API였습니다. 또한 사용자는 권한 부족으로 인해 UWP 앱에서 시스템 시간을 설정할 수 없습니다. | 시스템 시간만 얻으려면 Win32 API GetSystemTime 를 사용합니다. 시스템 시간을 설정할 수 없습니다. |
_environ
_putenv
_putenv_s
_searchenv
_searchenv_s
_dupenv_s
_wputenv
_wputenv_s
_wsearchenv getenv getenv_s putenv _wdupenv_s _wenviron _wgetenv _wgetenv_s _wsearchenv_s tzset |
UWP 앱에는 환경 변수를 사용할 수 없습니다. | 해결 방법이 없습니다. 표준 시간대를 설정하려면 _tzset 를 사용하세요. |
_loaddll
_getdllprocaddr
_unloaddll
|
이전 CRT 버전에서는 사용되지 않는 함수였습니다. 또한 사용자는 동일한 애플리케이션 패키지에 있는 DLL을 제외하고 DLL을 로드할 수 없습니다. | Win32 API LoadPackagedLibrary GetProcAddress FreeLibrary 를 사용하고 패키지된 DLL을 로드하고 사용합니다. |
_wexecl
_wexecle
_wexeclp
_wexeclpe
_wexecv
_wexecve
_wexecvp
_wexecvpe
_execl
_execle
_execlp
_execlpe
_execv
_execve
_execvp
_execvpe
_spawnl
_spawnle
_spawnlp
_spawnlpe
_spawnv
_spawnve
_spawnvp
_spawnvpe
_wspawnl
_wspawnle
_wspawnlp
_wspawnlpe
_wspawnv
_wspawnve
_wspawnvp
_wspawnvpe
_wsystem
execl
execle
execlp
execlpe
execv
execve
execvp
execvpe
spawnl
spawnle
spawnlp
spawnlpe
spawnv
spawnve
spawnvp
spawnvpe
system
|
UWP 앱에서는 이 기능을 사용할 수 없습니다. UWP 앱은 다른 UWP 앱 또는 데스크톱 앱을 호출할 수 없습니다. | 해결 방법이 없습니다. |
_heapwalk
_heapadd
_heapchk
_heapset
_heapused
|
이러한 함수는 일반적으로 힙 작업에 사용됩니다. 그러나 해당 Win32 API는 UWP 앱에서 지원되지 않습니다. 또한 앱은 더 이상 프라이빗 힙을 만들거나 사용할 수 없습니다. | 해결 방법이 없습니다. 그러나 _heapwalk 디버깅 목적으로만 DEBUG CRT에서 사용할 수 있습니다. 이러한 함수는 Microsoft Store에 업로드된 앱에서 사용할 수 없습니다. |
UWP 앱용 CRT에서 사용할 수 있는 함수는 다음과 같습니다. 그러나 큰 코드 베이스를 포팅하는 경우와 같이 해당 Win32 또는 Windows 런타임 API를 사용할 수 없는 경우에만 사용합니다.
기능 | 해결 방법 |
---|---|
단일 바이트 문자열 함수(예: strcat , strcpy , strlwr 등). |
노출된 모든 Win32 API 및 Windows 런타임 API는 유니코드 문자 집합만 사용하므로 UWP 앱을 엄격하게 유니코드로 만듭니다. 큰 코드 베이스를 포팅하기 위해 싱글 바이트 함수가 남아 있지만, 그렇지 않으면 피해야 합니다. 가능하면 해당 와이드 문자 함수를 대신 사용해야 합니다. |
스트림 IO 및 하위 수준 파일 IO 함수(예: fopen 등 open ) |
이러한 함수는 동기적이므로 UWP 앱에는 권장되지 않습니다. UWP 앱에서 비동기 API를 사용하여 파일을 열고 읽고 파일에 기록하여 UI 스레드의 잠금을 방지합니다. 이러한 API의 예는 클래스의 API입니다 Windows::Storage::FileIO . |
Windows 8.x 스토어 앱 및 Windows Phone 8.x 앱
앞에서 언급한 API와 다음 API는 모두 Windows 8.x 스토어 앱과 Windows Phone 8.x 앱에서 사용할 수 없습니다.
기능 | 설명 | 해결 방법 |
---|---|---|
_beginthread
_beginthreadex
_endthread
_endthreadex
|
스레딩 Win32 API는 Windows 8.x 스토어 앱에서 사용할 수 없습니다. |
Windows Runtime Windows::System::Threading::ThreadPool 사용하거나 concurrency::task 대신 사용합니다. |
_chdir
_wchdir
_getcwd
_getdcwd
_wgetcwd
_wgetdcwd
|
작업 디렉터리의 개념은 Windows 8.x 스토어 앱에는 적용되지 않습니다. | 대신 전체 경로를 사용합니다. |
_isleadbyte_l
_ismbbalnum , _ismbbalnum_l , _ismbbalpha _ismbbalpha _ismbbalpha_l _ismbbgraph _ismbbgraph_l _ismbbkalnum _ismbbkalnum_l _ismbbkana _ismbbkana_l _ismbbkprint _ismbbkprint_l _ismbbkpunct _ismbbkpunct_l _ismbblead _ismbblead_l _ismbbprint _ismbbprint_l _ismbbpunct _ismbbpunct_l _ismbbtrail _ismbbtrail_l _ismbslead _ismbslead_l _ismbstrail _ismbstrail_l _mbsdup isleadbyte |
다중 바이트 문자열은 Windows 8.x 스토어 앱에서 지원되지 않습니다. | 대신 유니코드 문자열을 사용합니다. |
_tzset |
Windows 8.x 스토어 앱에서는 환경 변수를 사용할 수 없습니다. | 해결 방법이 없습니다. |
_get_heap_handle , _heapmin |
해당 Win32 API는 Windows 8.x 스토어 앱에서 지원되지 않습니다. 또한 앱은 더 이상 프라이빗 힙을 만들 수 없습니다. | 해결 방법이 없습니다. 그러나 _get_heap_handle 디버깅 목적으로만 DEBUG CRT에서 사용할 수 있습니다. |