您的位置:首页 > 其它

COM与DLL的区别

2014-07-02 10:12 260 查看
com英文为Component Object Model(组件对象模型),是微软生产软件组件的标准。它是构造二进制兼容软件组件的规范,不管组件应用何种语言编写只要遵循com规范就可以相互直接通信。提出com规范主要是为了满足:

1.程序的快速开发,可以将一个大型的工程分成若干个com组件同时开发。

2.可以动态的插入或卸载com组件。

3.可以隐藏或封装com组件内部的实现细节。 com组件可以由不同的语言进行编写,但com组件之间的通信是通过组件的接口来实现的,com组件接口的实现是统一的,它采用的是虚拟函数表(VTBL)形式。虚拟函数表中包含了组件函数的一组指针,我们可以通过这组指针来获取我们想要通信的组件函数的内存地址。

dll(动态链接库)是包含函数和数据的模块的集合。它可以导出数据也可以导出函数以供其它的dll调用。dll的加载可以通过静态链接和动态链接两种方式。

Com和DLL最大的区别就是: dll是以函数集合的方式来调用的是编程语言相关的象VC必须加上extern "C"...而COM是以interface的方式提供给用户使用的是一种二进制的调用规范,是与编程语言无关的,它使用idl接口定义语言来描述自己使用类继承来实现自己的功能和方法.DLL只有DLL一种形势,里面可任意定义函数无限制,只能运行在本机上 而COM 有DLL和EXE两种存在形势: COM所在的DLL中必须导出四个函数:

dllgetobjectclass, dllregisterserver, dllunregisterserver, dllunloadnow

这四个函数各有作用,有些是提供给COM管理器用的,通过CLSID和IID来使用,有些是提供给注册机用的.

COM结合MTS,就是COM+, 是DCOM的高级版本,提供了更为强大和安全的分布式COM服务.

 

 

符合COM标准的dll可以在C#项目中的“引用” -- “添加引用”进来。

否则只能以以下方式使用该dll:

 

 

using System;
using System.Runtime.InteropServices;

namespace PLC
{
class SdkNative
{
[DllImport("plc_sdk.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi,EntryPoint = "plc_init")]
private static extern int plc_init(string path);
}
}

using PLC;
SdkNative.plc_init("c:\\sample.exe");


C#里面没有头文件这么一说的,所有的东西都是包含在类里面的。而类都是包含在命名空间里面的,也可以理解命名空间为头文件。但是方式不一样的。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: