学习COM仍有用吗?

10

有人想了解更多关于Windows Internals,正在阅读《Windows Internals》一书,并希望进入驱动程序开发领域。那么学习COM编程是一个好主意吗?

需要深入学习到什么程度?仅了解基础知识还是需要深入掌握,考虑到上述情况。

4个回答

7

对于内核模式驱动程序开发来说,COM的价值不是很大,但对于用户模式驱动程序可能会有潜在的用处。例如,DirectShow就是COM,甚至在内核模式DShow过滤器中还使用了一种轻量级的COM类比。

现有许多代码都是基于COM的,而遗留代码需要数年甚至数十年才能消失。但我认为更重要的是,当从C/C++中使用.NET程序集时,它们看起来像是COM对象,因此如果您打算继续编写C/C++代码,了解COM仍然具有一定的价值。

如果您计划转向C#、Java或其他没有指针的语言(根据SO上的问题,大多数程序员已经采用这些语言),那么了解COM并不值得机会成本。


4
如果你在这里侮辱别人,他们往往会通过给你的回答投反对票来作出反应,所以我会跳过。 :D - John Knoeller

4

COM在当前开发中使用不多,但仍有大量软件在使用它。只需了解基础知识即可。


4
“COM在当前的开发中并不常用”...真的吗?我主要使用.NET,但是花了很多时间与基于COM的组件进行接口交互! - Rob
与传统软件进行接口,是的——这就是为什么我说他应该学习基础知识。创建新的COM组件则不然。 - Joel
2
如果你收到一份工作邀请,要求你开发COM,请尽快朝相反的方向跑。 - Keith Rousseau
2
-1,这个答案完全没有回答原问题。Kevin的回答才是正确的。 - Hans Passant
1
我在评论中应该补充的是,我接口的基于COM的组件正在积极开发中。 - Rob

4

Windows设备驱动程序与COM无关。您可以安全地忽略它。


2
注意:这并非完全正确。多媒体驱动程序堆栈使用一种形式的COM。 - John Knoeller
2
+1 是真的,但是海报可能会遇到一些使用“COM-like”接口的较低级别API。我在使用VSS API时就遇到了这个问题,它有一个单独的IUnknown实现。了解COM可以让我更快地理解API。 - codekaizen

1
一方面,COM似乎是微软在本地代码和托管(.Net)代码之间进行互操作的首选方法。而且说实话,.Net确实很好地处理了COM。
另一方面,用Lino Tadros的不朽之言来说:

COM就像吸烟:如果你还没有开始,那么现在不应该开始;如果你已经在做了,那么现在是时候戒掉了。

个人而言,我会在需要与现有的COM对象(如MSXML)通信时使用它,或者在绝对需要从本地代码中访问.Net程序集而无法使用非托管导出等选项时使用它,但并不认为它对新开发有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接