2016-08-05 24 views
0

Windows-10デスクトップ&モバイルプラットフォームを対象としたC#アプリケーションがあります。私のアプリは、C++で書かれたWindowsランタイムコンポーネントをC++/cxバインディングで呼び出す。
私のC++コードは、TlsAllocTlsGetValueのTlsSetValueTlsFreeのようなローカルストレージのAPIを通し使用しています。 Windows App Certification Kitテスト(WACKテスト)を実行すると、ストアアプリでこれらのAPIが使用できないという不満があります。 UWP Windows-10:Storeアプリケーションでスレッドローカルストレージ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.

私は、Windows 10店舗のアプリのためにこれらのAPIのための代替手段を参照してくださいcouldntの。このMSDN page は、のWindows Phone 8にあるこれらのapiの利用状況のみを述べています。私は、任意の提案は非常に

+0

:あなたはTLSを使用して、既存のコードにリンクされている場合

代わりに、次のエミュレーションを(あなたのコード内の任意の場所にそれを置く)を使用することができますSDKのリリース。クリーンなレポートが必要な場合は、UCRTのように[代わりに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では、ULSPアプリケーションでTlsAlloc()を使用できます。あなたが最新のWACKを持っていることを確認する必要があるのはこのためです。 –

答えて

0

@HansPassantを理解されるであろう-DWINAPI_FAMILY = WINAPI_FAMILY_APPフラグ

を使用して、私のネイティブC++のlibsをコンパイルしていますのWindows-10

のためにこれらのAPIのに関するいかなる特定の情報を見つけるcouldntの答えはこれを理解するのを助けた。

スレッドローカルストレージ(TLS)APIは、UWP Windows-10 Storeアプリケーションでサポートされています。
は、私は、Windows SDKのバージョン10.0.14393.33
これに先立っては、TLS APIの

0

のWindows 10の電話UWPのアプリ用に出てエラーになります任意のバージョンにアップグレードしなければならなかった、ドキュメントが間違っているように見えます。 kernel32.libにリンクすると、Tls *関数を使用することができますが、展開しようとすると、DLLエラーが発生して失敗します。これは、すべてで変更されている、更新WACKを保つようにしてください

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); 
} 
} 
関連する問題