0

Windows-10 Desktop & 모바일 플랫폼을 대상으로하는 C# 앱이 있습니다. 내 응용 프로그램은 C++로 작성된 Windows 런타임 구성 요소를 C++/cx 바인딩과 함께 호출합니다.
내 C++ 코드는 하여 TlsAlloc, TlsGetValue, 으로 TlsSetValueTlsFree 같이 로컬 저장소 API를의 스레드 사용합니다. Windows App 인증 키트 테스트 (WACK 테스트)를 실행하면 저장소 앱에 이러한 API가 제공되지 않는다고 불평합니다.UWP Windows-10 : Store 앱에서 Thread Local Storage 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.

나는 윈도우 10 스토어 앱의 이러한 API를의 대안을 참조 couldnt한다. 이 MSDN pageWindows Phone 8에이 api의 가용성에 대해서 이야기합니다. 나는 이러한 API를의에 관한 특정 정보를 찾을 couldnt는 윈도우 10 나 를 사용하여 내 네이티브 C++ libs와 컴파일하고

-DWINAPI_FAMILY = WINAPI_FAMILY_APP 어떤 제안이 매우

+0

하는 업데이트 괴짜를 유지해야을, 이것은 모든 변경되었습니다 SDK 릴리스. 깨끗한 보고서를 원하면 UCRT처럼 [Use FlsAlloc 대신] (http://stackoverflow.com/a/27979758/17034)을 사용하십시오. –

+0

안녕하세요. @HansPassant, 답변 해 주셔서 감사합니다. FlsAlloc을 사용할 것을 제안 할 때, 내 코드에서 TlsAlloc에 ​​대한 모든 호출을 FlsAlloc으로 변경하거나이 트릭을 수행 할 수있는 매크로 설정이 필요하다는 것을 의미합니다. [MSDN 페이지] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms686801(v=vs.85) .aspx)는 "** Windows Phone Store 응용 프로그램이 이것을 호출하면 기능은 FlsAlloc ** "에 대한 인라인 호출로 대체됩니다. 이 대체 트릭이 Windows-10에서 발생합니까? 또는 이것은 WinPhone-8에만 국한되어 있습니까? –

+0

SDK v10을 사용하면 모든 UWP 앱에서 TlsAlloc()을 사용할 수 있습니다. 그래서 당신이 최신 WACK을 가지고 있는지 확인해야합니다. –

답변

0

@HansPassant을 이해할 수있을 것이다

플래그 대답은 이것을 이해하는 데 도움이되었습니다.

TLS (Thread Local Storage) API는 UWP Windows-10 Store 앱에서 지원됩니다.
내가 윈도우 SDK 버전 10.0.14393.33
이 이전에이 TLS API의

0

윈도우 10 전화 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); 
} 
}