Вопрос: Как создать COM-объект в приложении Universal Windows Platform (UWP)?Как создать COM-объект в приложении UWP? (C#)
Мотивация: Я хочу перейти с WPF на UWP. Поскольку моя рабочая нагрузка требует обращения к сторонним библиотекам, доступным только через COM (насколько я знаю), мне нужно сделать COM-вызовы из UWP.
Контекст:
- C#
- .NET
- Visual Studio 2015
- для Windows 10
- идеально нацеливание все UWP устройства, но хорошо, если ограничены настольные компьютеры/ноутбуки.
фон
В Visual Studio 2013 ("Classic Desktop" проект в 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 and COM for Windows Runtime apps and Universal Windows Platform (UWP) apps, который утверждает, что WinRT приложений (который включает в себя UWP приложения) можно использовать только подмножество объектов COM. MSDN предлагает либо использовать поддерживаемый элемент COM API, либо переносить с неподдерживаемого COM API на функциональную замену.
Мне удалось найти эту статью, выполнив ошибку во время выполнения, после того как я нашел способ сделать COM-вызов в моей сторонней библиотеке.Ошибка:
An exception of type 'System.Runtime.InteropServices.COMException' occurred in mscorlib.ni.dll but was not handled in user code
Additional information: Creating an instance of the COM component with CLSID {[edit: GUID removed]} using CoCreateInstanceFromApp failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)). Please make sure your COM object is in the allowed list of CoCreateInstanceFromApp.
Я все еще не уверены, стоит ли там встроенный способ доступа к COM API для моих сторонних библиотек. Если это не так, это может означать, что мне придется сделать свою собственную оболочку с помощью сетевых портов или что-то еще, что кажется неправильным.
Вы правы в том, что основное внимание уделяется корпоративным приложениям, поэтому невозможность использования Хранилища не имеет решающего значения. Спасибо за ссылку на Brokered Windows Runtime Components - это именно то, что я искал! – Nat
Я создал шаблон для брокерского компонента для приложения Universal windows. Проверьте мой пост здесь https://xamltips.wordpress.com/2015/11/13/brokered-component-for-uwp-on-windows-10/ – Lance