【文章內(nèi)容簡(jiǎn)介】
Inverse(IMoniker **ppmk)。 HRESULT IsSystemMoniker(DWORD *pdwMksys)。 HRESULT CommonPrefixWith(IMoniker *pmkOther, IMoniker **ppmkPrefix)。 HRESULT RelativePathTo(IMoniker *pmkOther, IMoniker **ppmkRelPath)。 HRESULT ComposeWith(IMoniker *pmkRight, BOOL fOnlyIfNotGeneric, IMoniker **ppmkComposite)。 HRESULT Reduce (IBindContext *pbc, DWORD dwReduceHowFar, IMoniker **ppmkToLeft, IMoniker **ppmkReduced)。 系統(tǒng)名字對(duì)象 typedef enum tagMKSYS { MKSYS_NONE = 0, MKSYS_GENERICCOMPOSITE = 1, MKSYS_FILEMONIKER = 2, MKSYS_ANTIMONIKER = 3, MKSYS_ITEMMONIKER = 4, MKSYS_POINTERMONIKER = 5, MKSYS_URLMONIKER = 6, MKSYS_CLASSMONIKER = 7, MKSYS_OBJREFMONIKER = 8, MKSYS_SESSIONMONIKER = 9 } MKSYS。 名字解析 HRESULT GetDisplayName(IBindContext *pbc, IMoniker *pmkToLeft, LPOLESTR *ppszDisplayName)。 HRESULT ParseDisplayName(IBindContext *pbc, IMoniker *pmkToLeft, LPOLESTR pszDisplayName, ULONG *pchEaten, IMoniker **ppmkOut)。 ?顯示名分隔符: “ ! ” 、 “ \”、 “ /”、“ :”或 “ [” 復(fù)合名字對(duì)象 ?通用復(fù)合名字對(duì)象 HRESULT CreateGenericComposite(IMoniker *pmkFirst, IMoniker *pmkRest, IMoniker **ppmkComposite)。 ?按從左到右的順序組合,滿足結(jié)合律 ?舉例:文檔內(nèi)部的電子表格 ROT表 ? COM使用 ROT表管理當(dāng)前系統(tǒng)中正在運(yùn)行的、已經(jīng)被注冊(cè)的名字對(duì)象 ? 客戶調(diào)用 GetRunningObjectTable函數(shù)訪問(wèn)ROT表 綁定環(huán)境對(duì)象 ?也是 COM實(shí)現(xiàn)的系統(tǒng)對(duì)象 綁定環(huán)境對(duì)象 (續(xù) ) ? 管理已被綁定的對(duì)象: – RegisterObjectBound、 RevokeObjectBound、ReleaseBoundObjects ? 管理綁定參數(shù): (文件訪問(wèn)模式、超時(shí)設(shè)置等 ) – SetBindOptions、 GetBindOptions ? 管理綁定過(guò)程中的對(duì)象參數(shù): – RegisterObjectParam、 GetObjectParam、 – EnumObjectParam、 RevokeObjectParam 復(fù)合名字對(duì)象綁定過(guò)程的剖析 ? IMoniker::BindToObject綁定過(guò)程: – ( 1)檢查 ROT表 – ( 2)分解。 pmkRight : pmkLeft,最右邊部分分離 – ( 3) 調(diào)用 pmkRightBindToObject(...,pmkLeft, ...) – ( 4)執(zhí)行 pmkRightBindToObject ? 如果 pmkLeft為簡(jiǎn)單名字對(duì)象,則可終止循環(huán) ? 否則, pmkRight往往要調(diào)用 pmkLeftBindToObject,從而形成自右向左的循環(huán)綁定過(guò)程 ? 舉例: File!Item1!Item2 File!Item1!Item2的綁定和構(gòu)造過(guò)程 p m k Ite m 2 Bin d T o Ob jec t( … , p m k F il e Ite m 1 , IID_ IUn k n o w n , p p v Ob j)客戶程序調(diào)用 p Co m p Bin d T o Ob jec t( … , IID_ IUn k n o w n , amp。 p Un k )復(fù)合名字對(duì)象被拆分成 p m k F il e Ite m 1 和 p m lIt e m 2 兩部分p m k F il e Ite m 1 Bin d T o Ob jec t( … , NU L L , IID_ I Ole Ite m Co n tain e r , amp。p Item 1 Ob j)p m k F il e Ite m 1 被拆分成 p m k F il e 和 p m lIt e m 1 兩部分p m k Ite m 1 Bin d T o Ob jec t( … , p m k F il e , IID_ I Ole Item Co n tain e r , amp。 p Item 1 Ob j)p m k F il e Bin d T o Ob jec t( … , NU L L , IID_ I Ole Ite m Co n tain e r , amp。 p F il e Ob j )創(chuàng)建文件對(duì)象并返回其 IOleIte m Co n tain e r 接口指針p F il e Ob j 指向文件對(duì)象的 IOleIte m Co n tain e r 接口指針p F il e Ob j G e tOb jec t(. .. , I ID_ I Ole Item Co n tain e r , amp。 p Item 1 Ob j )p Item 1 Ob j 指向文件對(duì)象中 Item 1 對(duì)象的 IOleIte m Co n tain e r 接口指針p Item 1 Ob j G e tOb jec t(. .. , I ID_ IUn k n o w n , amp。 p U n k )p Un k 指向文件對(duì)象的 Item 1 對(duì)象的 Item 2 對(duì)象的 I Un k n o w n 接口指針綁定方向方向構(gòu)造IOleItemContainer接口 COM名字對(duì)象分類 ? COM提供的系統(tǒng)名字對(duì)象 ? URL名字對(duì)象 ?自定義名字對(duì)象 系統(tǒng)名字對(duì)象 ? 文件名字對(duì)象 (File Moniker) WINOLEAPI CreateFileMoniker(LPCOLESTR lpszPathName, IMoniker **ppmk)。 ? 復(fù)合名字對(duì)象 (Composite Moniker) WINOLEAPI CreateGenericComposite(IMoniker *pmkFirst, IMoniker *pmkRest, IMoniker **ppmkComposite)。 ? 單項(xiàng)名字對(duì)象 (Item Moniker) WINOLEAPI CreateItemMoniker(LPCOLESTR lpszDelim, LPCOLESTR lpszItem, IMoniker **ppmk)。 ? 舉例: CreateFileMoniker(“File”, amp。pmkFile)。 CreateItemMoniker(“!”, “Item1”, amp。pmkItem1)。 pmkFileComposeWith(pmkItem1, FALSE, amp。pmkComp1)。 CreateItemMoniker(“!”, “Item2”, amp。pmkItem2)。 pmkComp1ComposeWith(pmkItem2, FALSE, amp。pmkComp2)。 系統(tǒng)名字對(duì)象 (續(xù) ) ? 反 名字對(duì)象 (Antimoniker)