Funkcje CRT nie są obsługiwane w aplikacjach platformy uniwersalnej systemu Windows

Wiele funkcji środowiska uruchomieniowego języka C (CRT) nie jest dostępnych podczas tworzenia aplikacji platforma uniwersalna systemu Windows (UWP). Czasami dostępne są obejścia — na przykład można użyć interfejsów API środowisko wykonawcze systemu Windows lub Win32. W innych przypadkach funkcje CRT zostały zakazane, ponieważ odpowiednie funkcje lub pomocnicze interfejsy API nie mają zastosowania do aplikacji platformy UWP. Aby wyszukać alternatywną metodę obsługiwaną dla środowisko wykonawcze systemu Windows, zobacz Alternatywy dla interfejsów API systemu Windows w aplikacjach platformy UWP.

W poniższej tabeli wymieniono funkcje CRT, które są niedostępne podczas tworzenia aplikacji platformy UWP. Wskazuje wszelkie obejścia, które mają zastosowanie.

Nieobsługiwane funkcje CRT

Function opis Obejście
_beep _sleep _seterrormode Te funkcje były przestarzałe w poprzednich wersjach CRT. Ponadto odpowiednie interfejsy API win32 nie są dostępne dla aplikacji platformy UWP. Brak obejścia.
chdir _chdrive getcwd Te funkcje są przestarzałe lub nie są bezpieczne wątkowo. Użyj _chdirfunkcji , _getcwd i powiązanych.
_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 Te funkcje we/wy konsoli są niedostępne w aplikacjach platformy UWP opartych na graficznym interfejsie użytkownika. Aplikacje konsolowe platformy UWP mogą używać tych funkcji. Aby uzyskać więcej informacji, zobacz Tworzenie aplikacji konsolowej platforma uniwersalna systemu Windows.
getpid _getpid Te funkcje są przestarzałe. Użyj interfejsu API GetCurrentProcessIdWin32 .
_getdiskfree Niedostępne. Użyj interfejsu API GetDiskFreeSpaceExWWin32 .
_getdrive _getdrives Odpowiedni interfejs API nie jest dostępny dla aplikacji platformy UWP. Brak obejścia.
_inp _inpd _inpw _outp _outpd _outpw inp inpd inpw outp outpd outpw We/Wy portów nie jest obsługiwane w aplikacjach platformy UWP. Brak obejścia.
_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 Ciągi wielo bajtowe nie są obsługiwane w aplikacjach platformy UWP. Zamiast tego użyj ciągów Unicode.
_pclose _pipe _popen _wpopen Funkcje potoku nie są dostępne dla aplikacji platformy UWP. Brak obejścia.
_resetstkoflw Obsługa interfejsów API Win32 nie jest dostępna dla aplikacji platformy UWP. Brak obejścia.
_getsystime _setsystime Były to przestarzałe interfejsy API w poprzednich wersjach CRT. Ponadto użytkownik nie może ustawić czasu systemowego w aplikacji platformy UWP z powodu braku uprawnień. Aby uzyskać tylko czas systemowy, użyj interfejsu API GetSystemTimeWin32 . Nie można ustawić czasu systemowego.
_environ_putenv_putenv_s_searchenv_searchenv_s_dupenv_s_wputenv_wputenv_s_wsearchenv getenv getenv_s putenv _wdupenv_s_wenviron_wgetenv_wgetenv_s_wsearchenv_stzset Zmienne środowiskowe nie są dostępne dla aplikacji platformy UWP. Brak obejścia. Aby ustawić strefę czasową, użyj polecenia _tzset.
_loaddll _getdllprocaddr _unloaddll Były to przestarzałe funkcje w poprzednich wersjach CRT. Ponadto użytkownik nie może załadować bibliotek DLL z wyjątkiem tych w tym samym pakiecie aplikacji. Użyj interfejsów LoadPackagedLibraryAPI Win32 , GetProcAddressi FreeLibrary , aby załadować i użyć spakowanych bibliotek 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 Funkcjonalność nie jest dostępna w aplikacjach platformy UWP. Aplikacja platformy UWP nie może wywołać innej aplikacji platformy UWP ani aplikacji klasycznej. Brak obejścia.
_heapwalk _heapadd _heapchk _heapset _heapused Te funkcje są zwykle używane do pracy z stertą. Jednak odpowiednie interfejsy API Win32 nie są obsługiwane w aplikacjach platformy UWP. Aplikacje nie mogą już tworzyć ani używać prywatnych stert. Brak obejścia. Jednak _heapwalk jest dostępny w narzędziu CRT debugowania tylko do celów debugowania. Tych funkcji nie można używać w aplikacjach przekazanych do sklepu Microsoft Store.

Następujące funkcje są dostępne w narzędziu CRT dla aplikacji platformy UWP. Należy jednak używać ich tylko wtedy, gdy nie można używać odpowiednich interfejsów API Win32 lub środowisko wykonawcze systemu Windows, takich jak podczas przenoszenia dużych baz kodu:

Funkcje Obejście
Funkcje ciągu jedno bajtowego — na przykład strcat, , strcpystrlwri tak dalej. Ustaw aplikacje platformy UWP wyłącznie na Unicode, ponieważ wszystkie interfejsy API Win32 i interfejsy API środowisko wykonawcze systemu Windows, które są uwidocznione, używają tylko zestawów znaków Unicode. Funkcje jednobajtowe pozostały do przenoszenia dużych baz kodu, ale w przeciwnym razie należy unikać. Odpowiednie szerokie funkcje znaków powinny być używane, jeśli jest to możliwe.
Funkcje we/wy plików niskiego poziomu i we/wy strumienia — na przykład fopen, openi tak dalej. Te funkcje są synchroniczne, co nie jest zalecane w przypadku aplikacji platformy UWP. W aplikacjach platformy UWP użyj asynchronicznych interfejsów API, aby otwierać, odczytywać i zapisywać w plikach, aby zapobiec blokowaniu wątku interfejsu użytkownika. Przykładami takich interfejsów API są te w Windows::Storage::FileIO klasie .

Aplikacje ze Sklepu Windows 8.x i aplikacje systemu Windows Telefon 8.x

Oba wymienione wcześniej interfejsy API i następujące interfejsy API są niedostępne w aplikacjach ze Sklepu Windows 8.x i aplikacjach systemu Windows Telefon 8.x.

Funkcje opis Obejście
_beginthread _beginthreadex _endthread _endthreadex Interfejsy API Win32 wątkowe nie są dostępne w aplikacjach ze Sklepu Windows 8.x. Zamiast tego użyj elementu Windows Runtime Windows::System::Threading::ThreadPool lub concurrency::task .
_chdir _wchdir _getcwd _getdcwd _wgetcwd _wgetdcwd Koncepcja katalogu roboczego nie ma zastosowania do aplikacji ze Sklepu Windows 8.x. Zamiast tego użyj pełnych ścieżek.
_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_mbsdupisleadbyte Ciągi wielo bajtowe nie są obsługiwane w aplikacjach ze Sklepu Windows 8.x. Zamiast tego użyj ciągów Unicode.
_tzset Zmienne środowiskowe nie są dostępne dla aplikacji ze Sklepu Windows 8.x. Brak obejścia.
_get_heap_handle, _heapmin Odpowiednie interfejsy API Win32 nie są obsługiwane w aplikacjach ze Sklepu Windows 8.x. Aplikacje nie mogą już tworzyć prywatnych stert. Brak obejścia. Jednak _get_heap_handle jest dostępny w narzędziu CRT debugowania tylko do celów debugowania.