是否可以这样理解---
.net框架中的那些类,都是COM组件。
"垃圾回收"就是IUnkown来实现的。
而其"using System.IO"等,就相当于组件的"IDL"接口定义文件。
使用C#语言编程,其实就相当于使用这些已定义的组件类型写程序。经过编译,形成的是对组件操作的命令集--即--托管代码(MISL)。
COM运行库,就相当于CLR。是这样吗?

解决方案 »

  1.   

    lz: c++与c#写的动态库,最大不同在于:后者直接写成了类似com的组件,(不过它是CLR标准,即托管语言)所以我们在net引用动态库是,从来不需要添加头文件!!   所以,你要是net写的动态库能使非net开发环境使用,必须从net的CLR标准转换为windows平台能通用的com标准库,具体做法:(一个范例)namespace TestEmailer
    {
      [interfaceType(ComInterfaceType.InterfaceIsDual)]
      public interface ICSharp   
      {   
          void sendmailMethod();   
      }   
        [ClassInterface(ClassInterfaceType.AutoDual)] 
        class MailM2:ICSharp   
        {
            public void sendmailMethod()
            {
    ……………………
            }
        }
     }2、创建类型库:tlbexp TestEmailer.dll执行后将生成TestEmailer.tlb,用COM Object Viewer看看。
      

  2.   

    Assembly确实是一个COM+组件。同时在编译的时候,可以选择是否在Assembly或者其中的某个类对COM可视。(COMVisable=True)只是Assembly是基于.net平台了。
      

  3.   

    >>两个时代的东西。不太好比较的。
    但感觉.net其实就是改造COM过来的,因为其过渡很平滑。
      

  4.   

    理论上是不相关的两个东西,事实上在windows系统上,有很多的关联。不过这种关联很弱,不是很强的,涉及到Com的部分都用元数据和平台相关的代码处理了。在一般的.net程序中不会看到Com的影子。在其它平台上更不会有Com的存在了,比如mono,它不可能在linux平台上实现Com
      

  5.   

    .NET只是一个框架(或者说一些服务,例如SQL Server,Exchange Server,BizTalk Server等,微软仍然在开发新的服务)。.NET跟商业应用紧密相关,如果你是在开发传统的桌面应用程序(如Office,Winzip等),.NET跟你基本上没有什么关系。.NET的主要目的是成为将来Internet上交换商业信息的平台,例如购物,转账以及订单处理。微软已经和福特合作在搭建第一个.NET应用平台。COM/DCOM(或者说COM+)更加成为.NET的核心,.NET的绝大部分服务(或者说编程接口)都是通过COM组件方式提供的。VC开发者和过去没有什么大的区别,仍然通过接口使用这些服务。像过去一样,微软为了让这些新的服务能够在脚本中使用(VB, VBScript, JScript),这些服务仍然提供IDispatch接口。VB.NET和ASP.NET有了很大的改变,特别是VB.NET,我不知道是否应该叫它C#.VBJ。要不要学COM有些像以前讨论的VB程序员是否要懂得Windows的消息循环机制以及窗口的管理。答案是肯定的,学习COM的基本知识对一个开发人员来说必要的,现在Windows越来越基于COM,例如Shell,DirectX,Networking,MAPI,只有使用接口(vtable)才能使用它们的全部功能。ATL和MFC都可以简化COM的编程工作,特别是ATL。
    学习COM是很苦,而且要求你精通C/C++。但是如果你掌握了COM,再学习其他任何东西都回觉得得心应手。坦白的说,COM是目前为止我见到过的除了Windows之外最复杂的东西(包括OLE)。最后一句话,COM是Windows将来的基础。
      

  6.   

    还是感觉,.net其实就是COM。只是MS对其进行了包装,使其编程界面对编程者更好罢了。
      

  7.   

    蜗牛讲解得不错...
    .net感觉就是用托管语言实现了很多 com 内容.不知道这样理解对不对...
      

  8.   

    千万别信楼上的哦
    1、开发Com不只是C++,用得最多是VB,最全面的赶得上C++的是Delphi,只有傻子才会用ATL开发Com应用,聪明的程序员用delphi。2、MFC开发com,c++程序员都不怎么用了,要用一般也就用ATL,但是ATL比较晦涩。3、微软已经明确表示不会再提供基于Com的新的应用程序接口了。Com已经没落,已经逐步被微软放弃了。
      

  9.   

    >>千万别信楼上的哦
    没有什么信不信的问题。只是提出自己的看法而已。大家讨论一下,会对问题有更深入的理解。
    >>3、微软已经明确表示不会再提供基于Com的新的应用程序接口了。Com已经没落,已经逐步被微软放弃了。当然,微软都为你包装好了,底层当然不欢迎你来动。:)
      

  10.   

    4、你可以不必再学习Com了,Com这个怪胎终于可以逐渐退出我们的视野了
      

  11.   

    底层怎么实现.net的Remoting,没有强制要求,基于操作系统的不同而不同。
      

  12.   

    >>4、你可以不必再学习Com了,Com这个怪胎终于可以逐渐退出我们的视野了
    但微软自己还在用啊!
    它的许多应用程序的SDK都是提供COM接口的。
      

  13.   

    想想也不可能,除非有特别的理由,比如效率或者兼容性要求,微软不可能用C++开发一个基于Com的应用程序接口,然后再找一帮子C#程序员把它包装起来再发布的。只可能就是使用托管代码的.net程序,现在加套子主要还是为了保留老的程序,省得再开发。
      

  14.   

    呵呵...现在 微软主推 MPC...
      

  15.   

    MPC是什么?
    晕!呵呵,MS带着我们狂奔:)
      

  16.   

    NET只是一个框架(或者说一些服务,例如SQL Server,Exchange Server,BizTalk Server等,微软仍然在开发新的服务)。.NET跟商业应用紧密相关,如果你是在开发传统的桌面应用程序(如Office,Winzip等),.NET跟你基本上没有什么关系。.NET的主要目的是成为将来Internet上交换商业信息的平台,例如购物,转账以及订单处理。微软已经和福特合作在搭建第一个.NET应用平台。COM/DCOM(或者说COM+)更加成为.NET的核心,.NET的绝大部分服务(或者说编程接口)都是通过COM组件方式提供的。VC开发者和过去没有什么大的区别,仍然通过接口使用这些服务。像过去一样,微软为了让这些新的服务能够在脚本中使用(VB, VBScript, JScript),这些服务仍然提供IDispatch接口。VB.NET和ASP.NET有了很大的改变,特别是VB.NET,我不知道是否应该叫它C#.VBJ。要不要学COM有些像以前讨论的VB程序员是否要懂得Windows的消息循环机制以及窗口的管理。答案是肯定的,学习COM的基本知识对一个开发人员来说必要的,现在Windows越来越基于COM,例如Shell,DirectX,Networking,MAPI,只有使用接口(vtable)才能使用它们的全部功能。ATL和MFC都可以简化COM的编程工作,特别是ATL。
    学习COM是很苦,而且要求你精通C/C++。但是如果你掌握了COM,再学习其他任何东西都回觉得得心应手。坦白的说,COM是目前为止我见到过的除了Windows之外最复杂的东西(包括OLE)。最后一句话,COM是Windows将来的基础。
      

  17.   

    COM/DCOM 在当今这个时代 ,还是很有用的.来自冰岛的网络游戏EVE.在服务器端有个重要的特性.那就是:动态负载平衡.即:如有一台服务器达到它所承载的人数.则自动分配给其他服务器.实现动态分配.利用这一特性的技术,恰恰是COM/DCOM的动态负载平衡。所以.各位讨论这些,没有什么意义.任何一种技术,自然有它存在的价值.只是,你用不到而已.工作本身就是一个学习的过程.用到了,就要去学.