我可以使用WRL编写COM服务器吗?

时间:2014-06-10 03:04:35

标签: c++ com atl wrl

我可以在C ++中使用WRL库来代替ATL来编写COM组件吗?如果是的话,我是否可以在较旧的桌面Windows系统上使用它,如Windows XP?

我非常确定第一个问题的答案是肯定的,因为我在MSDN上找到了这个教程:

http://msdn.microsoft.com/en-us/library/jj822931.aspx

但是非Windows 8系统呢?

2 个答案:

答案 0 :(得分:6)

嗯,确定你可以。您可以在纯C ++代码中编写COM服务器,而根本没有任何辅助类。如果你真的想要,你可以在C中写一个,尽管这在大多数司法管辖区都违反了“日内瓦程序员权利公约”。

可能不那么明显的是缺少。 WRL只是不容易编写服务器。或者保持它。你错过了什么:

  • 无需任何帮助即可实施IDispatch。在WinRT中已过时但在常规服务器中仍然非常重要。从脚本语言中使用服务器的唯一方法是,IDispatch提供后期绑定支持。
  • 无需任何帮助进行注册。在WinRT中已过时,是常规服务器所必需的。请注意DllRegisterServer()入口点是如何丢失的。您通过要求手动编写注册表脚本来链接问题的页面。这是有效的,它不是您想要维护或记录的东西,因此IT人员可以做到正确。
  • 没有BSTR,VARIANT和SAFEARRAY等自动化类型的包装器。在WinRT中与IDispatch一起被淘汰。不过,您仍然可以回到<comutil.h>
  • Visual Studio中内置的向导无法帮助您正确使用它。 COM服务器很笨拙,因为定义出现在代码的多个位置。并且需要完全匹配。您无法确保CalculatorComponent与IDL完全匹配,这完全取决于您。你从犯小错误中获得的编译器错误,特别是在维护错误时,可能会很痛苦。

还有一大堆如果不值得一提的小东西,比如公寓,ActiveX,聚合,错误信息等等。当你需要它时,伤害非常糟糕。 WRL的一个可能的优点是,没有神秘的胶水,ATL有相当数量的它可以大大提高抽象水平。这是故意的,但必须要学习。当然,当你使用纯C ++时根本没有,虽然你必须自己写太多。

答案 1 :(得分:0)

是。您可以编写标准COM组件。 在文档中直接有sample

否:这样的COM组件只能在Windows 8及更高版本上运行......