我有一个针对Windows-10桌面的C#应用程序移动平台。我的应用程序调用用C ++编写的带有c ++ / cx绑定的Windows运行时组件。
我的C ++代码使用线程本地存储api,如 TlsAlloc , TlsGetValue ,< strong> TlsSetValue 和 TlsFree 。
当我运行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 page 只讨论这些api在 Windows Phone 8 上的可用性。我无法找到关于 Windows-10
的这些api的任何具体信息我正在使用 -DWINAPI_FAMILY = WINAPI_FAMILY_APP 标记
编译我的原生C ++库任何建议都将受到高度赞赏
答案 0 :(得分:0)
UWP Windows-10商店应用程序支持线程本地存储(TLS)API。
我必须升级到Windows SDK版本 10.0.14393.33
在此之前的任何版本都会在TLS api&#39>上出错
答案 1 :(得分:0)
对于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);
}
}