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

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

本文关键字:应用 线程 API 存储 Windows-10 UWP      更新时间:2023-10-16

我有一个针对Windows-10桌面的C#应用程序;移动平台。我的应用程序调用了用C++编写的带有C++/cx绑定的Windows运行时组件。
我的C++代码使用线程本地存储api,如TlsAlloc>TlsGetValue[/strong>、TlsSetValueTls自由。当我运行Windows应用程序认证工具包测试(WACK测试(时,它会抱怨商店应用程序中的这些api不可用。

◦此应用程序不支持kernel32.dll中的API TlsAlloc类型sample.dll调用此API
◦kernel32.dll中的API TlsFree不是此应用程序类型支持。sample.dll调用此API
◦API此应用程序不支持kernel32.dll中的TlsGetValue类型sample.dll调用此API
◦kernel32.dll中的API TlsSetValue为此应用程序类型不支持。sample.dll调用此API。

我看不到Windows-10商店应用程序的这些api的替代品。此MSDN页面仅讨论这些api在WindowsPhone8上的可用性。我找不到任何关于Windows-10的这些api的具体信息

我正在使用-DINAPI_FAMILY=WINAPI_FAMILY_APP标志编译我的本机C++库

任何建议都将受到高度赞赏

@HansPassant的回答帮助解决了这个问题。

UWP Windows-10 Store应用程序支持线程本地存储(TLS(api。
我不得不升级到Windows SDK版本10.0.14393.33
在此之前的任何版本都会在TLS api的上出错

对于Windows 10 Phone UWP应用程序,文档似乎是错误的。如果你链接到kernel32.lib,你可以使用Tls*函数,但当你试图部署它时,它失败了,并出现了一个丢失的DLL错误。

相反,如果您链接到使用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);
}
}