资源描述:
《COM组件技术-自动化》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、内容自动化(Automation)•自动化基础•自动化对象实现潘爱民•自动化对象应用•自动化编程http://www.icst.pku.edu.cn/compcourse自动化产生与发展几个概念•弱类型的高级语言(比如VisualBasic)如何•自动化对象使用COM?–实现了IDispatch接口的COM对象•属性和方法•VBA(或VBScript)•ODL(对象描述语言)•类型库•自动化与COM的关系•自动化兼容的数据类型•自动化的广泛应用属性(property)和方法(method)类型库(typelib)•自动化对象的两个基本特性,都具有符•类型信息是客户程序与组件对象
2、之间通讯号化的名字,用DISPID来标识的基础•IDL和ODL•属性是指自动化对象的数据特征–接口类型信息使用interface或dispinterface关键字描述–属性可以由索引,索引可以是整数,也可以是其他–对象类型信息使用coclass关键字描述类型•library关键字描述库信息–一个组件程序中的所有对象放在一个ODL文件中,并•方法是指自动化对象所提供的功能服务用library关键字描述库信息–方法比属性要灵活得多,可以包含参数•工具MIDL:从ODL(IDL)编译成TLB文件1ODL描述举例ODL描述举例(续一)[[propput,helpstring("Retu
3、rnsandsetsxcoordinate.")]uuid(3C591B20-1F13-101B-B826-00DD01103DE1),//LIBID_Point.HRESULTx([in]intValue);helpstring("Point1.0TypeLibrary"),[propget,helpstring("Returnsandsetsycoordinate.")]lcid(0x0000),HRESULTy([out,retval]int*retval);version(1.0)[propput,helpstring("Returnsandsetsycoordinat
4、e.")]]HRESULTy([in]intValue);libraryPoint[helpstring("MovePointTo.")]{HRESULTMoveTo([in]intnewX,[in]intnewy);importlib("stdole.tlb");}[uuid(3C591B25-1F13-101B-B826-00DD01103DE1),//IID_IPoint.[helpstring("IPointinterface."),uuid(3C591B26-1F13-101B-B826-00DD01103DE1),//IID_DIPoint.]helpstring(
5、"DIPointinterface."),interfaceIPoint:IUnknown]{dispinterfaceDIPoint[propget,helpstring("Returnsandsetsxcoordinate.")]{HRESULTx([out,retval]int*retval);interfaceIPoint;}未完未完ODL描述举例(续二)另一个ODL接口例子[uuid(BFB73347-822A-1068-8849-00DD011087E8),[version(1.0),helpstring("Usefulhelpstring."),uuid(3C59
6、1B21-1F13-101B-B826-00DD01103DE1),//CLSID_Pointhelpcontext(2480)helpstring("PointClass"),appobject]]dispinterfaceMyDispatchObject{coclassPointproperties:{[id(1)]intx;//Anintegerpropertynamedx.[default]dispinterfaceIPoint;}[id(2)]BSTRy;//Astringpropertynamedy.}//forlibrarymethods:[id(3)]voids
7、how();//Noarguments,noresult.[id(11)]intcomputeit(intinarg,double*outarg);};IDispatch接口分发ID(DISPID)classIDispatch:publicIUnknown•整数,0和负数有特殊含义{public:保留的分发ID及其含义分发ID值说明virtualHRESULTGetTypeInfoCount(UINT*pctinfo)=0;接口的缺省成员,如果在客户程序中不指定属性或方virtualHRES