COM,COM组件,API,ACTIVEX控件之间的从属关系,请大家帮忙理一理我会点java和vb,现在要参与一个vb.net项目,
COM,COM组件,API,ACTIVEX控件之间的从属关系,请大家帮忙理一理
我会点java和vb,现在要参与一个vb.net项目,所以有些概念想弄清楚。
因为没有参见过c语言的项目,所以下面有些理解是自己猜出来的,望大家指正。
我比较通俗的理解:
1,com:是一种规范,只提供一个接口,具体怎么实现我不清楚。
2,com组件:顾名思义就是指实现了com规范的组件,比如说win32系统api就是基于com规范开发的一种组件,ACTIVEX控件也是基于com规范实现的。只要是称为com组件的dll,ocx,不管是用什么语言开发的,都能被不同的语言调用。
(疑惑之处:c实现的api,vb或者别的语言调用的话,如果某个参数的数据类型c有vb(delphi)没有,这个时候传递参数时微软是怎么处理的)
3,activeX和api,是不是可以认为用vb生成activeX就是自己开发的一个api,可以像调用系统api一样被c语言调用?
[解决办法]
com:是一种规范,不是一个接口。
ACTIVEX控件不是完全基于com规范。
参数传递有对应的转换表
用vb生成activeX就是自己开发的一个activeX,一般不可能符合com规范
API是系统提供的编程接口
[解决办法]
1)API 是过程级别的接口约定;COM 是对象级别的接口约定。
2)API 是弱类型,只要调用双方在参数堆栈的长度上符合约定即可;而 COM 是强类型,调用双方必须每个参数都匹配(遵循统一的 COM 类型定义)。
3)COM 和 ActiveX 其实是接近的,COM 偏重理论,整个标准不限于 Windows 平台;ActiveX 偏重技术,属于 Windows 平台下的 COM 实现。显然 COM 组件的概念包括但大于 ActiveX。
[解决办法]
两者没有必然的联系,com是一种规范; api是个广义的概念,它有没有遵循com规范视具体情况了
[解决办法]
COM是一种机制、规范,是一组二进制可移植的可执行代码;
API与COM、ActiveX没有直接关系;
ActiveX 是基于Windows平台的COM实现,有些书里有详细的底层实现方法。
[解决办法]
[解决办法]ms的com 是基于ms系统的注册机制的,跟Unix系列系统的通用动态库不是一个概念。
com其实是一种调用规范,规定了ms平台下各种编程语言之间的调用规则。
用C写过dll就知道所谓的dll函数导出表??就是其它语言包括自己可以调用的函数列表,其实就是一个二进制代码的函数地址引用表。所有的语言最终也要编译为二进制代码,对于计算机是没有语言的概念的,所以这种调用是有理由行的通的。
ms既要保证代码重用又要实现版本兼容和执行空间效率,不得不依赖为人诟病的注册机制。可想将来一旦有人揭秘这种机制的内幕,MS当前的XP等系统的漏洞就不只这么多了。
[解决办法][解决办法][解决办法][解决办法][解决办法][解决办法][解决办法][解决办法]我会点java和vb,现在要参与一个vb.net项目,所以有些概念想弄清楚。
因为没有参见过c语言的项目,所以下面有些理解是自己猜出来的,望大家指正。
我比较通俗的理解:
1,com:是一种规范,只提供一个接口,具体怎么实现我不清楚。
Com确实是一种规范,提供了二进制一级的跨语言能力。
2,com组件:顾名思义就是指实现了com规范的组件,比如说win32系统api就是基于com规范开发的一种组件,ACTIVEX控件也是基于com规范实现的。只要是称为com组件的dll,ocx,不管是用什么语言开发的,都能被不同的语言调用。
(疑惑之处:c实现的api,vb或者别的语言调用的话,如果某个参数的数据类型c有vb(delphi)没有,这个时候传递参数时微软是怎么处理的)
Com组件是使用了Com技术,以接口形式来使用的组件。Win32系统的API部分是Com组件提供的功能,但是Win32系统API其实不全是Com Interface。比如简单的CreateProcess等API是原生的C函数。ActiveX控件是基于Com技术实现的一种控件。因为是使用Com技术来开发,所以具有2进制级别的跨语言能力。关于参数传递,Com的参数传递使用Mashmal技术,就是列集和散列,因此可以对于不同语言的参数类型通过列集再传递给代理存根后散列就能得到目的语言调用的参数。
3,activeX和api,是不是可以认为用vb生成activeX就是自己开发的一个api,可以像调用系统api一样被c语言调用?
ActiveX技术是开发控件的,可以用VB开发一个ActiveX控件,经过注册后,就能提供给其他语言使用。(无需重新编译)。当然你可以给任意的语言使用,包括C,C++,甚至VBS,PHP,JS。
[解决办法]
通常 VC、BC、DEV-C、VB 这种是工具,支持的语言语法很多,
如 VC 或 BC ,支持 C/C++ 的语言,但 Keil C 就只支持
C 语言,不支持 C++,所以类呀、继承等概念都没有,而 BASIC
的工具有 VB、QB 等,如果是 QB,和 VB 的支持库完全不同,
甚至没有 API 和窗口的概念,而 VB 也没有调用中断的或图形
屏幕的概念。
[解决办法]
[解决办法]COM是技术规范 COM组件多指不带UI的符合COM规范的程序集 ACTIVEX控件多指以MFC为开发框架多带UI的符合COM规范的程序集 API这个不解释
COM是独立的 COM组件和ACTIVEX控件的开发都会使用Win32 API
基本上可以这么理解,但不是绝对的
[解决办法]