UWP Windows-10: как использовать API-интерфейсы Thread Local Storage в приложениях Store

У меня есть приложение C #, ориентированное на рабочий стол Windows-10 & Мобильные платформы. Мое приложение вызывает компонент среды выполнения Windows, написанный на C ++ с привязками c ++ / cx.

Мой код C ++ использует API-интерфейсы Thread Local Storage как TlsAlloc, TlsGetValue, TlsSetValue а также TlsFree.
Когда я запускаю тесты Windows App Certification Kit (WACK-тесты), он жалуется на недоступность этих API в приложениях магазина.

◦API TlsAlloc в kernel32.dll не поддерживается для этого приложения
тип. sample.dll вызывает этот API.
◦API TlsFree в kernel32.dll не является
поддерживается для этого типа приложения. sample.dll вызывает этот API.
◦API
TlsGetValue в kernel32.dll не поддерживается для этого приложения
тип. sample.dll вызывает этот API.
◦API TlsSetValue в kernel32.dll является
не поддерживается для этого типа приложения. sample.dll вызывает этот API.

Я не мог найти альтернативы для этих API для приложений магазина Windows-10. это Страница MSDN
говорит только о доступности этих API на Windows Phone 8. Я не мог найти какую-либо конкретную информацию относительно этих API для Окна-10

Я собираю свои родные библиотеки C ++, используя -DWINAPI_FAMILY = WINAPI_FAMILY_APP флаг

Любые предложения будут высоко оценены

0

Решение

Ответ @HansPassant помог понять это.

API-интерфейсы Thread Local Storage (TLS) поддерживаются в приложениях UWP Windows-10 Store.

Мне пришлось обновить до версии Windows SDK 10.0.14393.33

Любая версия до этого будет ошибка на API TLS

0

Другие решения

Для приложений Windows 10 Phone UWP документация выглядит неправильно. Вы можете использовать функции Tls *, если вы ссылаетесь на kernel32.lib, но при попытке развернуть его происходит сбой с отсутствующей ошибкой 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);
}
}
0

По вопросам рекламы [email protected]