文档介绍:。对象的两种方法:通过CoGetClassObject得到类厂,,提供了提供了第三种方法,即利用名字对象(moniker绰号,名字)对象的方法。对象。对象提供了的符号化的表示方法,同时也对组件对象的创建过程进行封装。客户程序只需创建相应的名字对象,并使用名字对象的绑定功能得到组件对象。在这个意义上,名字对象类似于类厂对象,:对象(1)对象monikerIMoniker(2)3之所以在类厂对象之外衍生出名字对象,是因为:对象,,下级的对象只有在上级的对象范围内才有意义,而且在确定了上级对象以后,下级对象可以更加简单(且更加明确和直观),,WorkBook,WorkSheet、对象的方式给应用程序员提供访问接口。“c:\MyDocuments\!Sheet2!R1C1:R2C2”表示存储在文件MyDocuments\:R2C2对象。这些对象往往都是永久对象。它们不仅有方法,。如果只使用CLSID,对象的此实例,,不仅更直观,而且必须以“复合名字”:IPersistStream{HRESULTBindToObject([in]IBindCtx*pbc,[in,unique]IMoniker*pmkToLeft,[in]REFIIDriid,[out,iid_is(riid)]void**ppv);……//其他成员未列出}IMoniker接口派生自IPersistStream接口(p242)接口成员函数功能上分为四组:1。名字管理2。实现绑定3。管理复合名字对象。4。名字解析。其中最为重要的是绑定操作函数BindToObject。所有的名字对象都实现了IMoniker接口,名字对象封装了组件对象的所有状态处理过程,客户使用IMoniker接口成员。按照统一的方法处理名字对象。(displayname),这时返回文件名字对象,也可以是组件对象的CLSID,这时返回类名字对象。也可以是经过扩充的以“!”等间隔开的复合名字,(这时返回复合名字对象)。(LPBCpbc,//绑定环境LPCOLESTRszUserName,//显示名ULONG*pchEaten,//绑定过程中解析的字符个数LPMONIKERFAR*ppmk//结果名字对象的指针);MkParseDisplayName根据显示名进行解析的结果生成名字对象,并以IMoniker指针的方式返回给客户。6名字对象有很多种,也有很多别的方法来创建名字对象。创建一个类名字对象WINOLEAPICreateClassMoniker(REFCLSIDrclsid,//该名字对象所命名的对象的CLSIDIMoniker**ppmk//结果名字对象的指针);:(IMyInterface**rgpc){IClassFactory*pcf=0; //声明目标组件对象的CLSID为一个显示名constOLECHARpwsz[]=OLESTR(“clsid:E2F41FB8-BE92-4d00-A3DD-D9C285B959C1”); //为绑定和解析名字对象创建一个新的绑定环境 IBindCtx*pbc=0;hEaten;IMoniker*pmk=0; HRESULThr=CreatBindCtx(0,&pbc); //将显示名转换为名字对象 hr=MkParseDispla