Jas*_*ueh 5 c++ com windows-runtime wrl uwp
我公司有许多用vb6编写的旧项目。我们有一些用ATL / C ++编写的可重用软件组件。现在,我们正在考虑使用UWP重写我们的应用程序,但是UWP应用程序似乎不支持旧的COM技术。我正在研究是否有一种方法来实现还支持UWP的COM对象。我知道将我们的旧组件移植到UWP组件肯定会起作用。但是我们不想维护两个版本的通用组件,因为我们已经发布了许多旧软件,但仍提供软件支持。其中一些软件已被我们的客户使用超过10年。无法升级我们提供的所有软件。
我提出了几种可能的解决方案:
桌面桥
我发现了一个短语“ Packaged COM”,UWP应用程序可以通过Desktop Bridge使用该短语。本文是对Desktop Bridge的COM服务器和OLE文档的支持,给出了一个从UWP应用程序调用exe COM服务器的示例。如果它也支持InProcessServer,这似乎是一个很好的解决方案。我确实发现了一些可疑的InProcessServer,但事实证明它是针对WinRT组件的。
我还尝试将COM引用添加到UWP项目。该代码可以成功引用COM对象。但是,它在运行时不起作用。UWP应用具有自己的注册表配置单元,因此不会加载已注册到系统注册表的COM对象。我的想法是,如果将注册信息添加到UWP应用程序的私有配置单元中,并将COM dll与该应用程序一起打包,则可能会起作用。只是找不到任何例子。
ATL / COM
由于我们已经将bussinuess逻辑实现到COM对象中。最可行的解决方案是升级我们的COM对象以支持UWP应用程序。WinRT组件仍然使用COM技术,但实现了新接口IInspectable,我假设如果旧的基于ATL的COM对象实现IInspectable接口,则可以对其进行修改以支持UWP的调用约定。我只是没有任何线索可以做到这一点。
WRL
我找到了MSDN文章“ 如何:使用WRL创建经典COM组件”,谈论了使用WRL项目模板来实现可在Win32应用程序和UWP应用程序中使用的COM对象类。
它说:
除了将其用于通用Windows平台(UWP)应用程序外,还可以使用Windows运行时C ++模板库(WRL)创建基本的经典COM组件以供桌面应用程序使用。
但是我很快意识到Microsoft不再支持WRL项目模板。我在网上可以找到的项目模板的所有下载链接都不再可用。
C ++ / WinRT
这项技术似乎是WRL的继承者。似乎很有希望,但不幸的是尚未发布。
为了澄清@Peter Torr的一些事情:
(1)您是否希望您的应用程序/ COM对象是“纯” UWP(在所有设备上运行),还是可以使用仅限桌面的fullTrust UWP(又名Desktop Bridge)?(2)COM对象仅用于附带它们的应用程序,还是应该由其他应用程序使用?
我公司使用Windows平台提供基于PC的工业自动化服务(包括硬件和软件)。因此答案是肯定的,我们对fullTrust UWP感到满意。我们的产品只能在台式机上运行。我们只想拥抱新技术并利用UWP的出色UI框架。
COM对象既适用于新应用程序(UWP),也适用于旧软件(某些基于vb6)。我们很高兴将COM对象与UWP应用程序打包在一起,并使用系统注册的COM作为旧软件,只要这些COM对象是相同的(从相同的代码库构建)即可。
| 归档时间: |
|
| 查看次数: |
384 次 |
| 最近记录: |