我想学习com。但是我听说Microsoft推出了.NET作为COM的替代方案。那么学习com值得吗?实际上,我开始为UMDF设备驱动程序学习COM。除了com外,还有其他方法可以在UMDF上使用吗?

有帮助吗?

解决方案

UMDF是开发用户模式设备驱动程序的框架。我认为设备驱动程序的关键要求是:加载快速。我不想延迟启动时间,因为我有一个时髦的设备驱动程序,该驱动程序必须加载和jit。

当然,您也可以开发肿的com库,但是通过有能力,您可以避免使用它。您无法避免.NET运行时。

因此,即使UMDF允许在此时间点进行.NET开发I,也不希望将.NET编写的设备驱动程序。

不要误会我的意思。我爱.net。我只是认为即使我们谈论的是Usermode驱动程序,它也不会与设备驱动程序混合在一起。

在查看com时,我认为这有助于理解它的开发:在不同环境中开发的组件之间提供互置。这回到了80年代。现在,人们多年来一直抱怨COM,但实际上非常成功。 COM的部署模型(即注册表依赖性)和其他有趣的设计选择中存在一些错误,这些选择使开发人员挠头。但是,com的核心(即ieunknown)仍然是IMO的。

其他提示

com是古老的,乏味的,令人沮丧的。我认为没有人喜欢与COM合作。因此,通常,除非您有真正令人信服的原因,否则我建议不要学习它。如果您需要使用一个COM库,我将学习如何通过COM Interop使用它,这使您可以与.NET的COM一起使用。

需要明确的是,.NET非常旨在替代COM。而且效果很好,这非常成功。但是com是 到处 在Windows中,您不能在典型的程序上摇一杆,也不能碰到某个地方。这是从任何.NET GUI程序中的第一位代码开始的,[Stathread]。

窗户中有很多东西尚未获得友好的.NET包装器。这并不总是需要,CLR对COM Interop有很好的支持。从“添加参考”对话框中可以看到,com选项卡中充满了好东西。但是您在该列表中看到的是专门设计的组件 任何 运行环境。他们实施了一个名为“ Ole Automation”的COM子集。

自动化是一个非常有限的子集,它的工作原理非常好,因为您实际上可以做的是有限的。但是,有一些代码不适合该子集。您找不到类型库的类型。没有类型的库,您就被拧入.NET。该问题最明显的组件是外壳。 Windows资源管理器。在托管代码中编写外壳扩展程序是 难的.

问题在于,COM接口声明最初是为了在实现多重继承的编译器上效果很好。 C ++具体。如果该COM接口是从另一个COM接口派生的,则A .NET接口声明并不能很好地映射到COM接口。 CLR生成错误的V台。这在这中涉及到 MSDN杂志文章, ,尽管作者的结论是完全错误的。

能够 用.NET语言编写COM接口声明并实现它们。只是你得到 SDK完全帮助。而且您需要很好地了解COM才能使它们正确。

UMDF也适合此模型,其接口源自Iunknown。无类型库。我不知道没有托管包装器。你 可以 在C#中写下您的代码,但您必须自己编写所有接口声明。实际上,此处仅适用C ++。

是的,您需要学习com。

COM之所以有用,是因为它允许您构建可以从多种语言消耗的独立语言API。现在,.NET大致用于SAMPE目的,尽管它易于访问。如果您对.NET进行了编程,则许多COM API的“ Just Work”,尽管对COM的工作方式有一些基本的了解是一件好事(因此,COM将重新计算用于内存管理,而.NET使用垃圾收集)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top