WRL: класс не зарегистрирован

В Visual Studio 2015 я создал C # «Windows Runtime Component (Windows 8.1)», который я хотел бы использовать в своем родном проекте Win32 C ++. Я сгенерировал необходимые заголовочные файлы для моего компонента WinRT, используя инструменты «winmdidl» и «midlrt». Но когда я пытаюсь активировать соответствующий интерфейс в своем коде Win32 C ++, используя библиотеку шаблонов Windows Runtime C ++ (WRL), я получаю код HRESULT 0x80040154 («Класс не зарегистрирован»).

Как я могу зарегистрировать свой компонент Windows Runtime?

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")
}

Я попробовал следующее без успеха:

  • Я добавил файлы .winmd и .pri моего компонента WinRT в мой
    C ++ проект.
  • Я добавил свой проект WinRT в решение, содержащее
    проект Win32 C ++ и попытался добавить ссылку на него (ошибка: «A
    ссылка не может быть добавлена, потому что она несовместима с этим
    проект «).
  • Я добавил директиву C ++ / CX #using для файла .winmd
    моего компонента WinRT в мой код Win32 C ++.
  • Я попытался добавить раздел реестра для моего компонента WinRT в «HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ WindowsRuntime \ ActivatableClassId», но там мне пришлось бы указать «DllPath» для библиотеки DLL, которой у меня нет (и даже в качестве администратора У меня нет прав, чтобы добавить ключ там).

Я использую Windows 10.

Примечание: я пытаюсь интегрировать компонент WinRT с моим приложением Win32, потому что я хотел бы использовать Windows Runtime API «Windows.UI.Input.Inking» для распознавания рукописного ввода. Я пытался использовать этот API в своем коде Win32 C ++ напрямую (с использованием WRL), но получил код HRESULT 0x80004002 («Такой интерфейс не поддерживается»).

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]