UWP Windows-10:如何在应用商店应用中使用线程本地存储 API
UWP Windows-10: How to use Thread Local Storage api's in Store apps
我有一个针对Windows-10桌面的C#应用程序;移动平台。我的应用程序调用了用C++编写的带有C++/cx绑定的Windows运行时组件。
我的C++代码使用线程本地存储api,如TlsAlloc、>TlsGetValue[/strong>、TlsSetValue和Tls自由。当我运行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);
}
}
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 通过安装信号处理程序关闭多线程应用程序
- 如何在实时应用程序中锁定线程
- 如何在 MFC 应用程序中启动 ZeroMQ 线程?
- 多线程应用中的流程尺寸不断增长
- 双线程应用比单线程应用慢 C++ (VC++ 2010 Express).如何解决?
- 多线程 gtkmm 应用程序最简单的示例
- 将数组作为多线程应用程序中函数的返回传递
- 修改多线程应用程序中的对象
- 多线程 C++11 应用程序中的同步
- 多线程Windows GUI应用程序中的死锁
- C++多线程应用程序将永远挂起
- 具有多线程应用程序的 Nanomsg 无阻塞双向套接字
- 在接收 SIGINT 操作时适当地关闭多线程 c++ 应用程序
- 如何在多线程应用程序中获得花费的时间
- Linux VM(重型多线程应用程序)的性能改进
- 如何将C++ dll 在 C# 窗口窗体应用程序下的工作线程中运行
- 在关闭应用程序期间正确关闭线程,该线程可能会运行很长时间的循环
- C 多线程崩溃应用程序
- 如何在不需要 root 访问权限的情况下为应用程序中的线程设置相对线程优先级