Вопрос: Как создать COM-объект в приложении универсальной платформы Windows (UWP)?
Мотивация: я хочу перейти с WPF на UWP. Поскольку моя рабочая нагрузка требует выполнения вызовов сторонних библиотек, доступных только через COM (насколько мне известно), мне нужно выполнять вызовы COM из UWP.
Контекст:
- C#
- .СЕТЬ
- Visual Studio 2015
- Windows 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
для использования _ 3_ и библиотеку типов COM-объекта.
Я хочу использовать этот код C # в приложении универсальной платформы Windows (UWP), созданном Visual Studio 2015 Enterprise в Windows 10 для образовательных учреждений. Я могу добавить ссылку на библиотеку типов 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 для моих сторонних библиотек. Если нет, это может означать, что мне придется создать свою собственную оболочку, используя сетевые порты или что-то в этом роде, что кажется неправильным.