1

ネイティブ 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 を使用できるかどうか疑問に思っています。

4

2 に答える 2

1

型で ABI プレフィックスを使用している場合は、低レベルの C++ 型を参照しています。低レベルの型は WRL で使用することを意図しており、^ 演算子のような C++/CX 拡張機能を使用することはできません。

代わりに ComPtr localSettings を使用してください。

于 2012-06-17T16:52:40.977 に答える
0

[ライブラリアン]->[一般]->[追加の依存関係] : %(AdditionalDependencies) を追加するよう誰かに言われ、ABI:: 名前空間を削除しました。今では動作します;-)

于 2012-06-18T10:48:46.310 に答える