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,例如 TlsAlloc、TlsGetValue、TlsSetValue 和 TlsFree。
当我 运行 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);
}
}
我有一个针对 Windows-10 桌面和移动平台的 C# 应用程序。我的应用调用 Windows 用 C++ 编写的带有 c++/cx 绑定的运行时组件。
我的 C++ 代码使用线程本地存储 api,例如 TlsAlloc、TlsGetValue、TlsSetValue 和 TlsFree。
当我 运行 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);
}
}