Funciones de CRT no admitidas en aplicaciones de la Plataforma universal de Windows

Muchas funciones de runtime de C (CRT) no están disponibles al compilar las aplicaciones de Plataforma universal de Windows (UWP). A veces hay soluciones alternativas disponibles; por ejemplo, puede usar Windows Runtime o las API de Win32. En otros casos, se han prohibido las funciones de CRT porque las características correspondientes o las API auxiliares no son aplicables a las aplicaciones UWP. Para buscar un método alternativo admitido para Windows Runtime, vea Alternatives to Windows APIs in Windows Store apps.

En la tabla siguiente se muestran las funciones de CRT que no están disponibles al compilar aplicaciones UWP. Indica las soluciones alternativas que se aplican.

Funciones CRT no admitidas

Función Descripción Solución alternativa
_beep _sleep _seterrormode Estas funciones eran obsoletas en las versiones anteriores de CRT. Además, las API de Win32 correspondientes no están disponibles para las aplicaciones UWP. Ninguna solución alternativa.
chdir _chdrive getcwd Estas funciones están obsoletas o no son seguras para subprocesos. Use las funciones _chdir, _getcwd y relacionadas.
_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 Estas funciones de E/S de consola no están disponibles en aplicaciones para UWP basadas en GUI. Las aplicaciones de consola de UWP pueden usar estas funciones. Para obtener más información, consulte Creación de una aplicación de consola de Plataforma universal de Windows.
getpid _getpid Estas funciones están obsoletas. Use la API de Win32 GetCurrentProcessId.
_getdiskfree No disponible. Use la API de Win32 GetDiskFreeSpaceExW.
_getdrive _getdrives La API correspondiente no está disponible para las aplicaciones UWP. Ninguna solución alternativa.
_inp _inpd _inpw _outp _outpd _outpw inp inpd inpw outp outpd outpw No se admite la E/S de puerto en las aplicaciones UWP. Ninguna solución alternativa.
_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 Las cadenas de varios bytes no se admiten en las aplicaciones UWP. Use las cadenas Unicode en su lugar.
_pclose _pipe _popen _wpopen La funcionalidad de canalización no está disponible para aplicaciones UWP. Ninguna solución alternativa.
_resetstkoflw Las API de Win32 auxiliares no están disponibles para las aplicaciones UWP. Ninguna solución alternativa.
_getsystime _setsystime Se trataba de API obsoletas en versiones anteriores de CRT. Además, un usuario no puede establecer la hora del sistema en una aplicación UWP debido a la falta de permisos. Para obtener solo la hora del sistema, use la API de Win32 GetSystemTime. No se puede establecer la hora del sistema.
_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 Las variables de entorno no están disponibles para aplicaciones UWP. Ninguna solución alternativa. Para establecer la zona horaria, use _tzset.
_loaddll _getdllprocaddr _unloaddll Se trataba de funciones obsoletas en versiones anteriores de CRT. Además, un usuario no puede cargar archivos DLL excepto los del mismo paquete de aplicación. Utilice las API de Win32 LoadPackagedLibrary, GetProcAddressy FreeLibrary para cargar y usar DLL empaquetadas.
_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 La funcionalidad no está disponible en aplicaciones UWP. Una aplicación UWP no puede invocar otra aplicación UWP o una aplicación de escritorio. Ninguna solución alternativa.
_heapwalk _heapadd _heapchk _heapset _heapused Estas funciones se suelen usar para trabajar con el montón. Sin embargo, no se admiten las API de Win32 correspondientes en aplicaciones de UWP. Además, las aplicaciones ya no pueden crear o usar montones privados. Ninguna solución alternativa. Sin embargo, _heapwalk está disponible en el CRT de depuración, solo para fines de depuración. Estas funciones no se pueden usar en aplicaciones que se cargan en Microsoft Store.

Las siguientes funciones están disponibles en CRT para aplicaciones para UWP. Sin embargo, úselas solo cuando no puedas usar las API de Win32 o Windows Runtime correspondientes, como al migrar bases de código grandes:

Functions Solución alternativa
Funciones de cadena de un solo byte, por ejemplo, strcat, strcpy, strlwry así sucesivamente. Haga que sus aplicaciones UWP sean estrictamente Unicode porque todas las API de Win32 y las API de Windows Runtime que se exponen solo usan juegos de caracteres Unicode. Las funciones de un solo byte se dejaron para portar grandes bases de código, pero por lo demás deben evitarse. Las funciones de caracteres anchos correspondientes deben usarse en su lugar cuando sea posible.
Funciones de E/S de archivo de nivel bajo y E/S de secuencias, por ejemplo, fopen, openy así sucesivamente. Estas funciones son sincrónicas, lo que no se recomienda para las aplicaciones UWP. En sus aplicaciones UWP, use las API asincrónicas para abrir archivos, leer desde ellos y escribir en ellos para evitar el bloqueo del subproceso de la interfaz de usuario. Ejemplos de estas API son las de la clase Windows::Storage::FileIO .

Aplicaciones de la Tienda Windows 8.x y aplicaciones de Windows Phone 8.x

Las API mencionadas anteriormente y las siguientes API no están disponibles en las aplicaciones de la Tienda Windows 8.x y las aplicaciones de Windows Phone 8.x.

Functions Descripción Solución alternativa
_beginthread _beginthreadex _endthread _endthreadex Las API de Win32 de subprocesos no están disponibles en las aplicaciones de la Tienda Windows 8.x. Use Windows Runtime Windows::System::Threading::ThreadPool o concurrency::task en su lugar.
_chdir _wchdir _getcwd _getdcwd _wgetcwd _wgetdcwd El concepto de un directorio de trabajo no se aplica a aplicaciones de la Tienda Windows 8.x. Use rutas de acceso completas en su lugar.
_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 Las cadenas de varios bytes no se admiten en las aplicaciones de la Tienda Windows 8.x. Use las cadenas Unicode en su lugar.
_tzset Las variables de entorno no están disponibles para aplicaciones de la Tienda Windows 8.x. Ninguna solución alternativa.
_get_heap_handle, _heapmin No se admiten las API de Win32 correspondientes en aplicaciones de la Tienda Windows 8.x. Además, las aplicaciones ya no pueden crear montones privados. Ninguna solución alternativa. Sin embargo, _get_heap_handle está disponible en el CRT de depuración, solo para fines de depuración.