Как создать COM-объект в приложении UWP? (С #)

Вопрос: Как создать COM-объект в приложении универсальной платформы Windows (UWP)?

Мотивация: Я хочу переключиться с WPF на UWP. Поскольку моя рабочая нагрузка требует выполнения вызовов сторонних библиотек, доступных только через COM (насколько я знаю), мне нужно делать вызовы COM из UWP.

Контекст:

C #.СЕТЬVisual Studio 2015Windows 10Идеально подходит для всех устройств UWP, но хорошо, если они ограничены настольными компьютерами.

Фон

В Visual Studio 2013 (проект «Классический рабочий стол» в Visual Studio 2015) я использовал код C #

// Conceptual:
DotNetInterface comObjectInstance =
    (DotNetInterface)Microsoft.VisualBasic.Interaction.CreateObject(
        "this string specified the COM object type"
      );

// Example:  Open Excel via COM:
Excel.Application oApp = (Excel.Application)Interaction.CreateObject("Excel.Application");

Проект Visual Studio требует ссылки наMicrosoft.VisualBasic использоватьInteraction.CreateObject() и библиотека типов объектов COM.

Я хочу использовать этот код C # в приложении универсальной платформы Windows (UWP), разработанном Visual Studio 2015 Enterprise для Windows 10 Education. Я могу добавить ссылку на библиотеку типов COM-объекта, но не могу ссылатьсяMicrosoft.VisualBasic поскольку он не отображается в диспетчере ссылок Visual Studio.

Мысли, проверенные решения, спекуляции и т. Д.

Я добавил ссылку на «Расширения рабочего стола Windows для UWP», надеясь, что она может разрешить вызовы обычных функций .NET, но пока не понял, как ее использовать.

Я полагаю, что даже если приложения UWP принципиально не могут делать вызовы COM, тогда мы могли бы по крайней мере создать оболочку, которая вызывает обычную программу .NET (даже если через сетевые порты), которая, в свою очередь, сможет выполнять вызов COM. Поскольку очевидно, что можно обойти даже в худшем случае, я чувствую, что должно быть (и, вероятно, так оно и есть) решение Microsoft для создания COM-объектов. Но я полагаю, что с тех пор, как UWP стал таким новым, онлайн-документация довольно скудна, и сейчас ее трудно найти.

Обновление № 1

Нашел статью MSDN,Win32 и COM для приложений среды выполнения Windows и приложений универсальной платформы Windows (UWP), который утверждает, что приложения WinRT (включая приложения UWP) могут использовать только подмножество COM-объектов. MSDN предлагает либо использовать поддерживаемый элемент COM API, либо перейти от неподдерживаемого COM API к функциональной замене.

Я смог найти эту статью, прибегнув к поиску ошибки во время выполнения, которая возникла после того, как я нашел способ сделать COM-вызов моей сторонней библиотеке. Ошибка:

Исключение типа «System.Runtime.InteropServices.COMException» произошло в mscorlib.ni.dll, но не было обработано в коде пользователя

Дополнительная информация: Создание экземпляра COM-компонента с CLSID {[edit: GUID удалено]} с использованием CoCreateInstanceFromApp не выполнено из-за следующей ошибки: 80040154 Класс не зарегистрирован (Исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)). Пожалуйста, убедитесь, что ваш COM-объект находится в списке разрешенных CoCreateInstanceFromApp.

Я до сих пор не уверен, есть ли встроенный способ доступа к COM API для моих сторонних библиотек. Если нет, это может означать, что мне придется создавать свою собственную оболочку, используя сетевые порты или что-то еще, что кажется неправильным.

Ответы на вопрос(4)

Ваш ответ на вопрос