我移植旧的Windows代码到Windows运行时(WinRT的),具体的Windows Phone 8.1。 该代码包含调用线程像TlsAlloc,TlsFree,TlsGetValue和TlsSetValue本地存储功能。 根据MSDN的“Win32和COM的Windows运行时应用(系统)”页面,这四个TLS功能的WinRT下支持。 读TlsAlloc文档 ,例如,一曰:
的Windows Phone 8.1:此功能支持Windows Phone应用商店的应用程序在Windows Phone 8.1或更高版本。 当Windows Phone应用商店的应用程序调用这个函数,它会被替换内嵌调用FlsAlloc。 请参阅FlsAlloc的函数文档。
当我#包括指定的头文件,Processthreadsapi.h,在我的旧代码,编译失败:
错误C2039:“TlsAlloc”:不是“`全局命名空间””成员
检查Processthreadsapi.h说明为什么它不能帮助我:
/***********************************************************************************
* *
* processthreadsapi.h -- ApiSet Contract for api-ms-win-core-processthreads-l1 *
* *
* Copyright (c) Microsoft Corporation. All rights reserved. *
* *
***********************************************************************************/
. . .
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
. . .
#ifndef FLS_OUT_OF_INDEXES
#define FLS_OUT_OF_INDEXES ((DWORD)0xFFFFFFFF)
#endif
#define TLS_OUT_OF_INDEXES ((DWORD)0xFFFFFFFF)
_Must_inspect_result_
WINBASEAPI
DWORD
WINAPI
TlsAlloc(
VOID
);
WINBASEAPI
LPVOID
WINAPI
TlsGetValue(
_In_ DWORD dwTlsIndex
);
WINBASEAPI
BOOL
WINAPI
TlsSetValue(
_In_ DWORD dwTlsIndex,
_In_opt_ LPVOID lpTlsValue
);
WINBASEAPI
BOOL
WINAPI
TlsFree(
_In_ DWORD dwTlsIndex
);
. . .
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
. . .
问题是清楚的:WinRT的属于WINAPI_PARTITION_APP的世界,而不是WINAPI_PARTITION_DESKTOP。 因此,当我编译我的应用程序的WinRT的,我没有得到任何这些符号和函数声明。
难道这只是一个Windows头的问题,其中MS应包括对WinRT中的TLS *的功能呢? 或者是线程不支持WinRT的本地存储,违背了文档?