日期:2014-05-19  浏览次数:21011 次

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

是这样吗?

------解决方案--------------------
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看看。

------解决方案--------------------
两个时代的东西。不太好比较的。
------解决方案--------------------
Assembly确实是一个COM+组件。同时在编译的时候,可以选择是否在Assembly或者其中的某个类对COM可视。(COMVisable=True)

只是Assembly是基于.net平台了。
------解决方案--------------------
理论上是不相关的两个东西,事实上在windows系统上,有很多的关联。不过这种关联很弱,不是很强的,涉及到Com的部分都用元数据和平台相关的代码处理了。

在一般的.net程序中不会看到Com的影子。

在其它平台上更不会有Com的存在了,比如mono,它不可能在linux平台上实现Com
------解决方案--------------------
lz比我熟悉多了...呜呜...
------解决方案--------------------
.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将来的基础。


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