Prayer

在一般中寻求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

COM组件与dll

Posted on 2008-09-12 12:54 Prayer 阅读(2443) 评论(0)  编辑 收藏 引用 所属分类: 组件
首先介绍什么是com组件,com组件是一种二进制规范,在这里我们要特别注意二进制规范这个词,com组件为了在同一种平台下不同语言间的可重用性,微软专门定义了一组规范,但是这种规范是得到各大厂家支持的,所以他是一种标准不是微软自己的产品,所以其他的语言的编译器支持这个二进制规范也就是说实现了这个规范,那么com组件就可以在很多语言中横行。

   至于com组件的跨平台问题,我先谈谈我对平台的理解。平台我认为应该分为两种,一种是机器本身的指令系统,也就是硬件。另一种是操作系统。语言在不同平台上要跨越的是硬件的指令系统和操作系统的系统本地函数例如最常见的是winAPI函数。所以在WINDOWS下编译成的com组件,只要不包含WINAPI函数,理论上,在相同的硬件基础上也是可以执行的。

在这种意义上,这种跨平台有些牵强。所以我认为com组件可以在很多平台上使用,但是真正做到跨平台是不可能的。

     DLL是一种程序动态调用以及连接的技术,他和组件是完全两种不同的概念,很多组件都采用这种技术作为自身的连接方式。说道DLL我们就要提一下普通的DLL和COM组件的区别,现在windows下使用的都是c语言接口的,因为windows系统函数基本上都是c接口的(能够被c语言理解的),所以现在的DLL很多也是完成这种接口的(在COM组件为成为主流之前),所以一种非com组件的DLL被另一种语言调用,前提是该语言支持对C接口的解释。例如:我用delphi写了一个DLL,在java中调用,java就会用JNI(java native interface)进行重写。作为对c接口的解释。至于对API函数的引用需不需要使用JNI,都有道理,如果用了,说明java内部没有替开发人员实现,如果没有使用JNI则说明java已经代替开发人员实现了。因为现有的API函数是一定的,可以事先实现。


只有注册用户登录后才能发表评论。
相关文章:
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理