WRL:未注册的班级

时间:2015-12-22 11:40:48

标签: c++ windows-runtime wrl

在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 ++项目并尝试添加对它的引用(错误:“A 无法添加引用,因为它与此不兼容 项目“)。
  • 我为.winmd文件添加了C ++ / CX #using指令 我的WinRT组件到我的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(“不支持此类接口”)。

0 个答案:

没有答案