在建置通用 Windows 平台 (UWP) 應用程式時,許多 C 运行时库 (CRT) 函數不可使用。 有時候有可用的因應措施,例如,您可以使用 Windows 執行時間或 Win32 API。 在其他情況下,CRT 函式已被禁止,因為對應的功能或支援的 API 不適用於 UWP 應用程式。 若要尋找 Windows 執行時間支援的替代方法,請參閱 UWP 應用程式中的 Windows API 替代方案。
下表列出建置 UWP 應用程式時無法使用的 CRT 函式。 它表示任何適用的因應措施。
不支援的CRT函式
| 功能 | 說明 | 因應措施 |
|---|---|---|
_beep
_sleep
_seterrormode
|
這些函式在舊版CRT中已經過時。 此外,UWP app 無法使用對應的 Win32 API。 | 沒有因應措施。 |
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
|
UWP app 無法使用對應的 API。 | 沒有因應措施。 |
_inp
_inpd
_inpw
_outp
_outpd
_outpw
inp
inpd
inpw
outp
outpd
outpw
|
UWP 應用程式中不支援埠 IO。 | 沒有因應措施。 |
_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 應用程式中不支援多位元組字符串。 | 請改用 Unicode 字串。 |
_pclose
_pipe
_popen
_wpopen
|
UWP app 無法使用管道功能。 | 沒有因應措施。 |
_resetstkoflw |
UWP app 不支援 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_stzset |
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 app 中無法使用此功能。 UWP 應用程式無法叫用另一個 UWP 應用程式或傳統型應用程式。 | 沒有因應措施。 |
_heapwalk
_heapadd
_heapchk
_heapset
_heapused
|
這些函式通常用於處理堆積。 不過,UWP 應用程式中不支持對應的 Win32 API。 而且,應用程式無法再建立或使用私有堆。 | 沒有因應措施。 不過,_heapwalk 僅在 DEBUG CRT 中可用,僅供偵錯之用。 這些函式不能用於上傳至 Microsoft 市集的應用程式。 |
CRT 提供以下功能給 UWP 應用程式使用。 不過,只有在您無法使用對應的 Win32 或 Windows 執行時間 API 時,才使用這些 API,例如當您移植大型程式代碼基底時:
| Functions | 因應措施 |
|---|---|
單一位元組字串函式,例如、strcatstrcpy、strlwr、 等等。 |
讓您的 UWP 應用程式嚴格使用 Unicode,因為公開的所有 Win32 API 和 Windows 執行時間 API 只會使用 Unicode 字元集。 單一位元組函式已保留用於轉換大型程式碼基底,否則應避免使用。 應盡可能改用對應的寬字元函式。 |
串流 IO 和低階檔案 IO 函式,例如 、 fopenopen等等。 |
這些函式是同步的,不建議用於UWP應用程式。 在您的 UWP 應用程式中,使用異步 API 來開啟、讀取和寫入檔案,以防止鎖定 UI 線程。 這類 API 的範例是 類別中的 Windows::Storage::FileIO API。 |
Windows 8.x 市集應用程式和 Windows Phone 8.x 應用程式
先前提及的 API 和下列 API 在 Windows 8.x 市集應用程式和 Windows Phone 8.x 應用程式中都無法使用。
| Functions | 說明 | 因應措施 |
|---|---|---|
_beginthread
_beginthreadex
_endthread
_endthreadex
|
Windows 8.x 市集應用程式中無法使用線程 Win32 API。 | 請改用 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 市集應用程式中無法支援多位元組字串。 | 請改用 Unicode 字串。 |
_tzset |
Windows 8.x 市集應用程式無法使用環境變數。 | 沒有因應措施。 |
_get_heap_handle、_heapmin |
Windows 8.x 市集應用程式中不支持對應的 Win32 API。 而且,應用程式無法再建立私人堆積。 | 沒有因應措施。 不過,_get_heap_handle 僅在 DEBUG CRT 中可用,僅供偵錯之用。 |