问题: 如何在通用Windows平台(UWP)应用程序中创建COM对象?
动机: 我想从WPF切换到UWP.由于我的工作量要求只能通过COM访问第三方库(据我所知),我需要从UWP进行COM调用.
语境:
背景
在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");
Run Code Online (Sandbox Code Playgroud)
Visual Studio项目需要Microsoft.VisualBasic
使用Interaction.CreateObject()
和COM对象的类型库的引用.
我想在Windows 10 Education上的Visual Studio 2015 Enterprise生成的通用Windows平台(UWP)应用程序中使用此C#代码.我能够添加对COM对象的类型库的引用,但无法引用,Microsoft.VisualBasic
因为它没有出现在Visual Studio的Reference Manager中.
思考,尝试过的解决方案,猜测等
我添加了对"UWP的Windows桌面扩展"的引用,希望它可以启用对正常.NET功能的调用,但还没有弄清楚如何使用它.
我认为即使UWP应用程序从根本上不能进行COM调用,我们至少可以构造一个调用正常.NET程序的包装器(即使通过网络端口),这反过来又可以运行COM调用.由于即使在最糟糕的情况下显然也可以解决这个问题,我觉得微软提供的COM对象应该是(并且可能是)提供的解决方案.但我想自从UWP这么新以来,在线文档很稀疏,现在很难找到.
更新#1
发现了MSDN文章,Win32和COM for Windows Runtime应用程序和通用Windows平台(UWP)应用程序,声称WinRT应用程序(包括UWP应用程序)只能使用COM对象的子集.MSDN建议使用受支持的COM API元素或从不受支持的COM API迁移到功能替换.
我找到一种方法对我的第三方库进行COM调用后,通过谷歌搜索运行时错误找到了这篇文章.错误:
mscorlib.ni.dll中出现"System.Runtime.InteropServices.COMException"类型的异常,但未在用户代码中处理
附加信息:由于以下错误,使用CoCreateInstanceFromApp创建具有CLSID {[edit:GUID已删除]}的COM组件实例失败:80040154未注册类(HRESULT异常:0x80040154(REGDB_E_CLASSNOTREG)).请确保您的COM对象位于允许的CoCreateInstanceFromApp列表中.
我仍然不确定是否有一种内置方式来访问我的第三方库的COM API.如果没有,这可能意味着我将不得不使用网络端口或其他东西制作我自己的包装器,这似乎是错误的.