COM组件编程—接口定义语言IDL
来源:互联网 发布:冒险岛766最新数据库 编辑:程序博客网 时间:2024/05/27 21:49
通过IDL描述接口,再通过MIDL编译生成代理和残根DLL。
IDL的一个示例:
import "unknwn.idl" ; typedef struct {double x ;double y ;double z ;} Point3d ;interface IZ : IUnknown{HRESULT FzStructIn([in] Point3d pt) ;HRESULT FzStructOut([out] Point3d* pt) ;} ;// Interface IX[object,uuid(32bb8323-b41b-11cf-a6bb-0080c7b2d682),helpstring("IX Interface"),pointer_default(unique)]interface IX : IUnknown{HRESULT FxStringIn([in, string] wchar_t* szIn) ;HRESULT FxStringOut([out, string] wchar_t** szOut) ;HRESULT FyCount([out] long* sizeArray) ;HRESULT FyArrayIn([in] long sizeIn, [in, size_is(sizeIn)] long arrayIn[]) ;HRESULT FyArrayOut([out, in] long* psizeInOut, [out, size_is(*psizeInOut)] long arrayOut[]) ; HRESULT FzStructIn([in] Point3d pt) ;HRESULT FzStructOut([out] Point3d* pt) ;[propput]HRESULT Visible([in] VARIANT_BOOL bVisible) ;[propget]HRESULT Visible([out, retval] VARIANT_BOOL *pbVisible) ;} ;library ServerLib{importlib("stdole32.tlb") ;// Component 1[uuid(0c092c29-882c-11cf-a6bb-0080c7b2d682),helpstring("Component 1 Class")]coclass Component1{[default] interface IX ;interface IY ;interface IZ ;};}其中import 用于包含其他idl文件,相当于include
[]为信息分隔符;
在每一接口前都有一个属性列表,也叫接口头
接口头中
object 表示接口是一个COM接口,这类接口返回值为HRESULT类型,可帮助指定网络错误 (这是微软对IDL的一个扩展)
uuid 为接口对应的IID
helpstring 放入一个帮助字符串
pointer_default 告诉MIDL如何处理指针。
ref : 把指针当作引用对待 (指针不能为空,总是指向合法地址,调整前后指向同一内存地址)
unique : 指针可为空,函数内可修改其值,不能指定别名
ptr : 这是一个C指针,可为空,函数内可修改其值,可指定别名
参数中in, out 代表参数传递方向,可帮助MIDL优化。out参数必须是指针,retval关键字说明哪一个参数应当作为函数的返回值处理。string 代表参数是一个字符串指针,可通过查找末尾的空字符确定长度。size_is 指定指针参数指向内容的大小。IDL 也可以传递复杂的参数,例如上面的Point3d。
propput和propget将COM函数说明为一个属性,C++会自动加上get_和put_前缀
library 代表要生成一个类型库
interface 指定接口名称,该名称被用在coclass部分里来指定组件支持的接口
coclass 描述由某一给定的COM对象所支持的接口,而GUID指定了组件本身
default 指定了默认的接口,一个组件对象可以拥有至多两个默认接口,一个是针对源,另一个是针对可编程宿接口。
MIDL编译器对IDL文件进行语法分析并为组件生成以下三部分文件
生成C++头文件,声明并定义接口、类标识符和工程接口标识符。ProjectName.h ProjectName_i.c
编译生成类型库,用户可以通过检查该类型库(.tlb)来确定他们应该如何访问该库,并与之交互
生成一系列c文件和一个make文件,根据他们创建代理/占位dll文件(DLLDate.c,ProjectName_p.c,ProjectNamePS.MK)
0 0
- COM组件编程—接口定义语言IDL
- 接口定义语言IDL,COM
- IDL接口描述语言和COM接口COM组件
- IDL接口定义语言
- IDL接口定义语言
- 分布式 COM - 代理/存根及 IDL 接口定义语言
- [COM]接口描述语言IDL
- [COM]接口描述语言IDL
- OMG 接口定义语言(IDL)
- IDL接口定义语言教程
- 接口定义语言(IDL)简介
- IDL接口定义语言教程
- Firefox 扩展系列 – Firefox Extension IDL 定义组件接口
- COM中的IDL语言的难点之接口指针
- web idl 接口定义语言数据类型与 C++绑定关系
- COM接口-用C++语言定义接口
- COM接口-用C++语言定义接口
- COM组件编程—IUnknown的三个接口函数
- Hadoop、Pig、Hive、Storm、NoSQL 学习资源收集
- 也瘦网要推出也瘦APP啦
- Lucene4.10使用教程(四):lucene的Search
- PDF转word破解版使用
- 母牛的故事
- COM组件编程—接口定义语言IDL
- 时光机穿梭
- 132C Logo Turtle
- 【DP】Codeforces Round #139 (Div. 2)225 C Barcode
- PopWindow动画实现底部滑出菜单
- 微信网页开发
- RSCP和ECNO都很差了,为什么不切换到比它信号好的小区(中兴设备)
- Oracle汉字三种排序:nlssort函数的用法以及参数
- Lucene4.10使用教程(五):lucene的分词器