×

Loading...
Ad by
  • 推荐 OXIO 加拿大高速网络,最低月费仅$40. 使用推荐码 RCR37MB 可获得一个月的免费服务
Ad by
  • 推荐 OXIO 加拿大高速网络,最低月费仅$40. 使用推荐码 RCR37MB 可获得一个月的免费服务

难道随着.NET的到来,COM真的可以退出了吗?

我也觉得很困惑,Don Box 说COM是一种更好的C++,确实COM的思想提供更好的面向对象支持,如接口,属性,版本控制,等。但在我学了几天的C#后发现,可能C#是更好的COM,COM有的面向对象的特点,C#本身就支持,所以从这层意思上来说COM确实又落后了。

另外COM提供了一个标准的二进制接口(据说UNIX可以提高实现此接口来实现COM),但.NET的FRAMEWORK(ROTOR项目)实现了类似JAVA的虚拟机,C#和VB.net编的程序生产相同的中级代码(已经可以在WINDOWS 和freebsd上跑),所以.NET也基本可以做到跨平台,跨语言。

难道随着.NET的到来,COM真的可以退出了吗?
Report

Replies, comments and Discussions:

  • 工作学习 / IT技术讨论 / 本人6年C++开发经验,现在正自学一些COM/COM+/DCOM/ATL之类的东东,不知有没有同道中人愿意一起切磋,共同进步。
    • 我也在研究COM等,也有一些这样的经验,希望切磋,共同提高。特别是COM在。net中会有一些变化。ronliu2k@hotmail.com
      • COM会被淘汰。另研究COM理论意义不大。ATL不难只要理解Template概念。我是改行刚两年,说的不对,give me a thread.
        • through COM and .NET Interop, COM will be there for a while.
          • 我懂.NET一丁丁。。NET不就是建立在WEB SERVICE基础上提供服务的吗?直接写普通class不久行了吗?还用那么麻烦干什么.因为web service已经能够跨平台语言我们用不着二进制代码上兼容了,赫赫。
            当然以前开发的COM需要保留,从而需要与.net interoperate,对吗?
            • Don't forget the importance of .NET Remoting, well, web services crosses the platform because of the protocal. However, from performance's viewpoint, most intranet apps should be built through remoting...
              • 老大不要欺负我E文不行了。不明白remoting什么的意思。望指教。欢迎汉文。
            • 难道随着.NET的到来,COM真的可以退出了吗?
              我也觉得很困惑,Don Box 说COM是一种更好的C++,确实COM的思想提供更好的面向对象支持,如接口,属性,版本控制,等。但在我学了几天的C#后发现,可能C#是更好的COM,COM有的面向对象的特点,C#本身就支持,所以从这层意思上来说COM确实又落后了。

              另外COM提供了一个标准的二进制接口(据说UNIX可以提高实现此接口来实现COM),但.NET的FRAMEWORK(ROTOR项目)实现了类似JAVA的虚拟机,C#和VB.net编的程序生产相同的中级代码(已经可以在WINDOWS 和freebsd上跑),所以.NET也基本可以做到跨平台,跨语言。

              难道随着.NET的到来,COM真的可以退出了吗?
        • 我也用ATL开发过一些COM,感觉ATL做COM很简单,不过也有可能做的COM太简单。以下是我从[深入解析ATL]( ATL INTERNALS)中抄录的一段话,我还没有看ATL INTERNALS这本书,所以很难发表评论。
          要想真正用好ATL,一定要了解ATL的机理,这不同于MFC的情况。假如我们不懂MFC的机理,一样可以作出很好的程序,利用MFC,在不懂OLE细节的情况下,一样可以提供OLE 的支持。ATL要求我们很细致地调节它的类,根据需要选择合适的模板类,必要时还要修正其行为。ATL尽管已经发展到3.0版本,但仍然有不少错误,这本书已经指出了一些错误,但我相信还有更多的错误,这对程序员提出了更高的要求,确实也是这样,因此得出结论:使用ATL一定要懂ATL。
          • 你能告诉我开发COM为什么用C++吗?
            • 你的意思是应该就用ATL,还是可以用DELPHI,或VB做?
              • 诶呀呀。VB或其他仅支持2种现成而C++支持4种嘛。这样一来除非对性能要求很高的组建才用C++。
            • C++支持非自动化接口,更多的线程类型(这点在VS .Net已经解决,VB也能支持自由线程。)。
              • 多聊聊VB的自由现成
                • 话题太宽,干脆一问一答吧。如何?
          • 当前开发COM用的最多的语言是什么?
            • 我用过VB,DELPHI, 和VC(ATL),在我的项目中VC用的最多。 别人的我不知道。
              • 当然VB.其它也就无所谓拉
                • 如果是简单的COM(VB也能实现的),用ATL好像也很简单呀!
                  • 每个人都能很好理解Template和IDL?
            • VB最方便,VC功能最强,Delphi介于两者之间。
          • 你概念中的COM会复杂到什么程度?大多数情况下会用开发复杂COM吗?
            • 我做的COM都很简单,所以我也很想知道COM到底会复杂到什么程度。我只是一个COM初学者。
              • 复杂是与性能相关的(我理解).如果不时Critical,就不要复杂拉开发速度第一位
            • 组件的设计应该综合考虑单个组件的复杂程度,和多个组件的调用开销。
              单个组件太复杂,不利于开发、维护和复用。太简单的话又会造成太大的组件间调用开销。是以应该综合考虑。
              • 偶,你说的很学术.
                • 只是自己开发后的一点经验和体会。
                  • 希望举例说明和看图说话
                    • 要是那样的话,可以写一本书啦。
              • 我想组件开发一般还是以功能来切分比较好。
          • 看明白ATL beginner就不错了
            • 我想我是达到ATL beginner的水平了,不过我觉得自己很菜。
          • IT界有句经典:能转就行。
            • 搞IT的,不能转还行?在这个论坛里的,谁学新东西会慢? 但大家都是有点追求的人,总是希望技术能深一层次,琢磨琢磨也不是坏事,闲着也是闲着嘛!
          • 睡了?
            • 没有!
              • 接着说
    • 我以为,COM是MS的基础技术。绝对不会被.NET代替。
      其实.net只是浮在com上的一个平台。c#的所有对象都是com对象。因
      此在.net下开发com其实变的更容易了。
      从我的观点来看,其实com的基础思想和c++渊源很深,但是用vc开发
      windows在逻辑上却不如c语言自然。因为c++中的类之间没有消息传递
      机制。因此用mfc,atl封装的开发模型都十分牵强。逻辑上十分勉强。
      而用c语言开发windows又十分麻烦,因此微软在windows开发上一直
      没有向java那样的利器。只有出现了.net和c#后,开发windows才成了
      另人赏心悦目的事情。我认为微软一定会以.net为核心重新构建操作系
      统的。但.net的核心仍然是com。所以学习com是永远不会过时的。
      • 怎么着怎么着,你还想帮微软重见操作系统?
      • 一句话,把面向对象程序开发转向面向组件的程序开发。
        • 好象我刚学IT时已经这样拉。
          • 什么时候学的?
            • 两年前
      • 见正文
        COM在.net的作用我不知道,因为.NET还可以在BSD上实现,难道BSD上面也有COM?(这也是可能的,不过可能性也许不大)。.net实际上就是一个虚拟机,我看不出来和COM有什么直接的关系。
        ”c++中的类之间没有消息传递机制“ 是什么意思,能否解释一下?
        还有即使COM在.net中依然是核心,但我们在商业系统中是否要引入COM呢?(既然C#和.net已经可以实现用COM的功能)
        • 我不同意.NET是一个虚拟机的概念。
          事实上.NET是基于frame SDK,可以理解为一个运行库和开发库。
          另外,商业系统上已经有许多运用了COM。但由于受到Wintel平台的约束,对于大规模化还有欠缺。不过,在与一些基于Java的应用服务器提供商的探讨中,提供商也承认,单从EJB的执行效率上没有COM高(毕竟COM是本机代码,而EJB还要解释执行)。
          至于,”c++中的类之间没有消息传递机制“ 我想,应该是指类似于组件间的同步或异步消息传输机制。微软的方案是消息队列,sun则是JNDI
          • .net就是虚拟机+类库
            .net分成好几层,最接近操作系统的那一层叫CLR(即对中间代码解释执行的模块,相当与JAVA虚拟机),再上一层是基本类库,再上是XML的接口,再上则为WEB service等。所以.net framework就是虚拟机+类库(前者可能更重要些)现在在商业系统中当然COM用得很多,但这都是在非.NET环境下的。而我们现在讨论的是在.NET中COM的生存空间。
    • 你怎么不发言?好拉,洗洗睡了.
      • 我觉得只有在深入学习了COM和.NET以后才能有力地回答COM是否会被淘汰这个问题。
        其实任何一门技术都有它寿终正寝的时候,但是现在还看不到
        COM/COM+要完蛋的迹象。在.NET中,COM+还是核心技术,处理
        有关“事务处理”等方面的系统功能。总之,它还处在不断的发展之中。但是我认为现在学COM/COM+绝对不是什么落伍的事。如果能掌
        握了COM的精髓,.NET不过是手到擒来的事。真希望能又真正的
        C++/COM高手来答疑解惑,可惜这些人是不会有时间搞科普的。唉!

        谢谢dreamree,希望能有机会共同切磋提高。
        • 你呀,深入学吧。
        • COM技术早就游乐.微软只把那些在也藏不住的接近成熟的技术公布,COM是一例。COM+是什么呀我是没看出有进步。Transaction技术早已成熟还研究个什么。初学望指教
        • 高手是不上网的拉。别等拉我们寥寥
        • 快速入门,一招制敌
          关于 COM 和 CLR 的比较早的文章:
          Is COM Dead? by Don Box
          http://msdn.microsoft.com/msdnmag/issues/1200/com/com1200.asp

          实际操练时可以参考的书:
          .NET and COM: The Complete Interoperability Guide by Adam Nathan

          从 COM/DCOM 到 .NET Remoting 的教材:
          http://docs.msdnaa.net/ark_new/Webfiles/courseware3.htm#dnrk7

          .NET 里的 COM+: Serviced Component
          http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconwritingservicedcomponents.asp
          • 看起来不错。我会仔细研读。
    • How's going on now? I know a little bit on both. Would like to improve with you guys. Email me and I will send you my phone numbers.