1

我正在尝试将本机 sdk 移植到 Windows RT 并帮助我实现缺少的功能来模拟注册表访问,因此我创建了一个静态库(文件->新建->项目...->静态库( Metro Style 应用程序),我已经声明了这样的功能:

// 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

好的,有人告诉我添加 In Librarian->General->Additional Dependecies : %(AdditionalDependencies) 并且我已经删除了 ABI:: 命名空间。现在它起作用了;-)

于 2012-06-18T10:48:46.310 回答