COM,COM组件,API,ACTIVEX控件其间的从属关系,请大家帮忙理一理
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实现,有些书里有详细的底层实现方法。
------解决方案--------------------
大概就是一种规范的模型体系,有配套的一系列API支持的类型约定,基于
特定的函数入口初始化这种模型,然后通过规范好的几个固有结构体传输
参数执行指定过程。在系统中,以注册表为记录基础,以GUID为类型关键
说明,有专门的服务处理机制。总之,用起来容易,通常的开发起来也不难,
但要搞清楚具体架构或流程,就是非常复杂的事。
在VC的 Platform SDK 中有详细的 COM 模型说明和范例,还有纯 API
打造的 COM 模型范例,你可以详细看看。
------解决方案--------------------
ms的com 是基于ms系统的注册机制的,跟Unix系列系统的通用动态库不是一个概念。
com其实是一种调用规范,规定了ms平台下各种编程语言之间的调用规则。
用C写过dll就知道所谓的dll函数导出表⋯⋯就是其它语言包括自己可以调用的函数列表,其实就是一个二进制代码的函数地址引用表。所有的语言最终也要编译为二进制代码,对于计算机是没有语言的概念的,所以这种调用是有理由行的通的。
ms既要保证代码重用又要实现版本兼容和执行空间效率,不得不依赖为人诟病的注册机制。可想将来一旦有人揭秘这种机制的内幕,MS当前的XP等系统的漏洞就不只这么多了。
------解决方案--------------------
所谓的 API 就是将多个函数入口点以公共的方式放出来,可供别的程序调用,
而别的程序要调用到 API 函数需要使用 LoadLibrary 先将程序载入内存,
然后通过 GetProcAddress 取得内部函数的地址,当你调用的时候,直接
通过 CallWindowProc 执行取得的函数地址便可完成 API 函数的调用过程。
而 Windows 程序不论是什么样的接口,都会有公共的入口点的,比如 Windows
的可执行程序,入口点基础是 WinMain,而 ISAPI 接口有4个入口点,一下
不记得具体的了,驱动程序的入口点是 DriverEntry,NT服务程序的是 WinMain
和 ServiceMain,COM 的是 DllMain DllCanUnloadNow DllGetClassObject
DllRegisterServer DllUnregisterServer 等。这种接口应该都可以用
调用 API 的方法取得的。
------解决方案--------------------
C 也可以做 COM 组件。就看你选用哪个接口。
------解决方案--------------------
NO
只是操作系统是基于 API 的,所以组件必定有一部分需要通过 API 的方式与操作系统打交道。
就像某些网店,网络交易只接受信用卡结算,但是他自己采购时不排除用现金交易。
------解决方案--------------------
我会点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实现,有些书里有详细的底层实现方法。
------解决方案--------------------
大概就是一种规范的模型体系,有配套的一系列API支持的类型约定,基于
特定的函数入口初始化这种模型,然后通过规范好的几个固有结构体传输
参数执行指定过程。在系统中,以注册表为记录基础,以GUID为类型关键
说明,有专门的服务处理机制。总之,用起来容易,通常的开发起来也不难,
但要搞清楚具体架构或流程,就是非常复杂的事。
在VC的 Platform SDK 中有详细的 COM 模型说明和范例,还有纯 API
打造的 COM 模型范例,你可以详细看看。
------解决方案--------------------
ms的com 是基于ms系统的注册机制的,跟Unix系列系统的通用动态库不是一个概念。
com其实是一种调用规范,规定了ms平台下各种编程语言之间的调用规则。
用C写过dll就知道所谓的dll函数导出表⋯⋯就是其它语言包括自己可以调用的函数列表,其实就是一个二进制代码的函数地址引用表。所有的语言最终也要编译为二进制代码,对于计算机是没有语言的概念的,所以这种调用是有理由行的通的。
ms既要保证代码重用又要实现版本兼容和执行空间效率,不得不依赖为人诟病的注册机制。可想将来一旦有人揭秘这种机制的内幕,MS当前的XP等系统的漏洞就不只这么多了。
------解决方案--------------------
所谓的 API 就是将多个函数入口点以公共的方式放出来,可供别的程序调用,
而别的程序要调用到 API 函数需要使用 LoadLibrary 先将程序载入内存,
然后通过 GetProcAddress 取得内部函数的地址,当你调用的时候,直接
通过 CallWindowProc 执行取得的函数地址便可完成 API 函数的调用过程。
而 Windows 程序不论是什么样的接口,都会有公共的入口点的,比如 Windows
的可执行程序,入口点基础是 WinMain,而 ISAPI 接口有4个入口点,一下
不记得具体的了,驱动程序的入口点是 DriverEntry,NT服务程序的是 WinMain
和 ServiceMain,COM 的是 DllMain DllCanUnloadNow DllGetClassObject
DllRegisterServer DllUnregisterServer 等。这种接口应该都可以用
调用 API 的方法取得的。
------解决方案--------------------
C 也可以做 COM 组件。就看你选用哪个接口。
------解决方案--------------------
NO
只是操作系统是基于 API 的,所以组件必定有一部分需要通过 API 的方式与操作系统打交道。
就像某些网店,网络交易只接受信用卡结算,但是他自己采购时不排除用现金交易。
------解决方案--------------------