2016-08-05 34 views
0

Ich habe eine C# -App Targeting Windows-10 Desktop & Mobile Plattformen. Meine App ruft die in C++ geschriebene Windows-Laufzeitkomponente mit C++/CX-Bindungen auf.
Meine C++ Code verwendet Local Storage api Thread wie TlsAlloc, TlsGetValue, TlsSetValue und TlsFree. Wenn ich Windows App Certification Kit-Tests (WACK-Tests) ausführen, beschwert es sich über die Nichtverfügbarkeit dieser API in den Store-Apps. UWP Windows-10: Wie verwende ich Thread Local Storage APIs in Store-Apps

◦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.

Ich konnte nicht für Windows-10-Shop App Alternativen für diese api sehen. Diese MSDN page spricht nur über diese Verfügbarkeit der API auf Windows Phone 8. Ich konnte nicht irgendeine spezifische Informationen in Bezug auf diese api finden von Windows-10

ich meine native C++ Libs bin Kompilieren mit -DWINAPI_FAMILY = WINAPI_FAMILY_APP Flagge

Alle Vorschläge werden in hohem Grade

+0

Seien Sie sicher, WACK aktuellen Stand zu halten, hat das mit jeder geändert SDK-Version. Wenn Sie einen sauberen Bericht wünschen, verwenden Sie [stattdessen FlsAlloc] (http://stackoverflow.com/a/27979758/17034), wie es der UCRT tut. –

+0

Hi @HansPassant, Danke für die Antwort. Wenn Sie vorschlagen, FlsAlloc zu verwenden, bedeutet das, dass ich in meinem Code alle Aufrufe von TlsAlloc in FlsAlloc ändern muss, oder gibt es eine Makroeinstellung, die diesen Trick für mich übernehmen kann. Die [MSDN-Seite] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms686801 (v = vs.85) .aspx) sagt, dass "** Wenn eine Windows Phone Store-App dies aufruft Funktion wird es durch einen Inline-Aufruf von FlsAlloc ** ersetzt ". Tritt dieser Ersatztrick mit Windows-10 auf? oder ist das nur auf WinPhone-8 beschränkt? –

+0

Mit SDK v10 kann TlsAlloc() von jeder UWP-App verwendet werden. Deshalb müssen Sie sicherstellen, dass Sie über ein aktuelles WACK verfügen. –

Antwort

0

@HansPassant geschätzt werden Antwort half, dies herauszufinden.

Thread Local Storage (TLS) -Apps werden in UWP Windows-10 Store-Apps unterstützt.
ich auf Windows SDK Version 10.0.14393.33
Jede Version vor diesem wird Fehler aus auf TLS api

0

Für Windows 10 Phone UWP-Anwendungen zu aktualisieren hatte, erscheint die Dokumentation falsch. Sie können die Tls * -Funktionen verwenden, wenn Sie eine Verknüpfung zu kernel32.lib herstellen, aber wenn Sie versuchen, sie zu implementieren, schlägt sie mit einem fehlenden DLL-Fehler fehl.

Stattdessen, wenn Sie vorhandenen Code verknüpfen, die TLS verwendet, können Sie die folgende Emulation verwenden (im Code setzen überall):

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); 
} 
}