1

在 Visual Studio 2015 中,我创建了一个 C#“Windows 运行时组件 (Windows 8.1)”,我想在我的本机 Win32 C++ 项目中使用它。我已经使用“winmdidl”和“midlrt”工具为我的 WinRT 组件生成了必要的头文件。但是,当我尝试使用 Windows 运行时 C++ 模板库 (WRL) 激活我的 Win32 C++ 代码中的相应接口时,我得到 HRESULT 代码 0x80040154(“类未注册”)。

如何注册我的 Windows 运行时组件?

Win32 C++ 代码:

#include "WindowsRuntimeComponent1.h"
using namespace WindowsRuntimeComponent1;
...

RoInitializeWrapper initialize(RO_INIT_MULTITHREADED);
if (FAILED(initialize))
{
    return PrintError(__LINE__, initialize);
}

ComPtr<IClass1Class> o1;
HRESULT hr = GetActivationFactory(HStringReference(RuntimeClass_WindowsRuntimeComponent1_Class1).Get(), &o1);
if (FAILED(hr))
{
    return PrintError(__LINE__, hr);  // returns 0x80040154 ("Class not registered")
}

我尝试了以下方法但没有成功:

  • 我已将我的 WinRT 组件的 .winmd 和 .pri 文件添加到我的 C++ 项目中。
  • 我已将我的 WinRT 项目添加到包含 Win32 C++ 项目的解决方案中,并尝试添加对它的引用(错误:“无法添加引用,因为它与此项目不兼容”)。
  • 我已将我的 WinRT 组件的 .winmd 文件的 C++/CX #using 指令添加到我的 Win32 C++ 代码中。
  • 我试图将我的 WinRT 组件的注册表项添加到“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsRuntime\ActivatableClassId”,但是我必须为我没有的 DLL 指定一个“DllPath”(甚至作为管理员)我无权在那里添加密钥)。

我正在使用 Windows 10。

旁注:我正在尝试将 WinRT 组件与我的 Win32 应用程序集成,因为我想使用 Windows 运行时 API“Windows.UI.Input.Inking”进行手写识别。我曾尝试在我的 Win32 C++ 代码中直接使用该 API(使用 WRL),但收到了 HRESULT 代码 0x80004002(“不支持此类接口”)。

4

0 回答 0