ネイティブ SDK を Windows RT に移植しようとしていますが、不足している機能を実装してレジストリ アクセスをエミュレートしたいので、静的ライブラリを作成しました ([ファイル] -> [新規] -> [プロジェクト...] -> [静的ライブラリ] ( Metro スタイル アプリ) で、次のように関数を宣言しました。
// WinRT stuff
#include <windows.storage.h>
#include <wrl/client.h>
#include <wrl/wrappers/corewrappers.h>
using namespace Microsoft::WRL;
using namespace Microsoft::WRL::Wrappers;
using namespace ABI::Windows::Storage;
using namespace ABI::Windows::Foundation;
LSTATUS
APIENTRY
RegOpenKeyExW(
_In_ HKEY hKey,
_In_opt_ LPCWSTR lpSubKey,
_In_opt_ DWORD ulOptions,
_In_ REGSAM samDesired,
_Out_ PHKEY phkResult
)
{
LSTATUS ret = ERROR_SUCCESS;
if (hKey == NULL)
return ERROR_INVALID_HANDLE;
if (phkResult == NULL)
return ERROR_INVALID_PARAMETER;
ABI::Windows::Storage::ApplicationDataContainer^ localSettings =
ApplicationData::Current->LocalSettings;
...
}
ただし、コンパイルしようとすると、次のエラーが発生します。
1>c:\users\joe\documents\visual studio 2012\projects\lib1\lib1\oal.cpp(275):
error C3699: '^' : cannot use this indirection on type
'ABI::Windows::Storage::ApplicationDataContainer'
Windows ランタイム拡張機能の消費 ( /ZW
) が有効になっていることを確認したので (既定では)、静的ライブラリ内で C++/CX を使用できるかどうか疑問に思っています。