UWP Windows-10:如何在商店应用程序中使用线程本地存储 api

UWP Windows-10: How to use Thread Local Storage api's in Store apps

我有一个针对 Windows-10 桌面和移动平台的 C# 应用程序。我的应用调用 Windows 用 C++ 编写的带有 c++/cx 绑定的运行时组件。
我的 C++ 代码使用线程本地存储 api,例如 TlsAllocTlsGetValueTlsSetValueTlsFree。 当我 运行 Windows 应用程序认证套件测试(WACK 测试)时,它抱怨这些 api 在商店应用程序中不可用。

◦API TlsAlloc in kernel32.dll is not supported for this application type. sample.dll calls this API.
◦API TlsFree in kernel32.dll is not supported for this application type. sample.dll calls this API.
◦API TlsGetValue in kernel32.dll is not supported for this application type. sample.dll calls this API.
◦API TlsSetValue in kernel32.dll is not supported for this application type. sample.dll calls this API.

对于 Windows-10 商店应用程序,我看不到这些 api 的替代品。这个MSDN page 只谈论 api 在 Windows Phone 8 上的可用性。对于 Windows-10

,我找不到关于这些 api 的任何具体信息

我正在使用 -DWINAPI_FAMILY=WINAPI_FAMILY_APP flag

编译我的原生 C++ 库

任何建议将不胜感激

@HansPassant 的回答有助于解决这个问题。

线程本地存储 (TLS) api 在 UWP Windows-10 商店应用程序中受支持。
我必须升级到 Windows SDK 版本 10.0.14393.33
在此之前的任何版本都会在 TLS api 的

上出错

对于 Windows 10 Phone 个 UWP 应用程序,文档似乎有误。如果您 link 到 kernel32.lib,您可以使用 Tls* 函数,但是当您尝试部署它时,它失败并出现缺少 DLL 错误。

相反,如果您要 link 访问使用 TLS 的现有代码,则可以使用以下模拟(将其放在代码中的任何位置):

extern "C" {
DWORD WINAPI __imp_TlsAlloc() {
    return FlsAlloc(nullptr);
}
BOOL WINAPI __imp_TlsFree(DWORD index) {
    return FlsFree(index);
}
BOOL WINAPI __imp_TlsSetValue(DWORD dwTlsIndex, LPVOID lpTlsValue) {
    return FlsSetValue(dwTlsIndex, lpTlsValue);
}
LPVOID WINAPI __imp_TlsGetValue(DWORD dwTlsIndex) {
    return FlsGetValue(dwTlsIndex);
}
}