freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

com:可連接對象結(jié)構(gòu)化存儲(已修改)

2024-10-28 16:06 本頁面
 

【正文】 COM:可連接對象 amp。 結(jié)構(gòu)化存儲 潘愛民 內(nèi)容 ?復(fù)習(xí): COM基礎(chǔ) ?可連接對象 ?結(jié)構(gòu)化存儲 復(fù)習(xí): COM基礎(chǔ) Apartment COM組件 COM客戶 { IXxx *p。 p… } Apartment proxy COM庫 (SCM, ) COM庫 () COM庫 () Registry 進(jìn)程 A 進(jìn)程 B 機(jī)器 A 機(jī)器 B 安全通道 ORPC 雙接口 VB客戶 聚合模型的關(guān)鍵 對象 BIO th e rIn te rf a c e對象 AIS o m e In te rfa c e客戶程序調(diào)用傳遞調(diào)用數(shù)據(jù)如何傳遞 ?可連接對象 (connectable object) ?內(nèi)容: –可連接對象結(jié)構(gòu)模型 –實現(xiàn)可連接對象 (源對象 ) –客戶 源對象 接收器的協(xié)作過程 –可連接對象的程序?qū)崿F(xiàn) 雙向通信機(jī)制 —— 客戶與可連接對象的關(guān)系 客戶接收器可連接對象客戶把接收器的接口指針傳給對象可連接對象調(diào)用接收器的接口成員兩個概念 ? 入接口 (ining interface) – 組件對象實現(xiàn)入接口,客戶通過入接口調(diào)用對象提供的功能 – 客戶和組件都需要知道接口的類型信息 ? 出接口 (outgoing interface) – 客戶端提供的 COM對象實現(xiàn)出接口 – 組件端的對象通過出接口調(diào)用客戶提供的功能 – 組件提供接口類型信息,客戶實現(xiàn)該接口 – 類似于回調(diào) (callback),但是要復(fù)雜和靈活得多 出接口 ? 類型信息由組件一方提供 ? 客戶提供出接口的實現(xiàn),實現(xiàn)出接口的 COM對象被稱為接收器對象 (sink) – sink沒有 CLSID,也不需要類廠 ? 也是一個 COM接口,有 IID ? 每個成員函數(shù)代表了: – 事件 event – 通知 notification – 請求 request 源對象 or 可連接對象 ? Connectable object, source ?普通的 COM對象,支持一個或者多個出接口 ?提供出接口的類型信息 –通過 IProvideClassInfo[2]接口 –通過 typelib 客戶與可連接對象之間的兩種結(jié)構(gòu) 客戶接收器可連接對象可連接對象可連接對象客戶接收器客戶接收器客戶接收器可連接對象可連接對象的基本結(jié)構(gòu) 接收器可連接對象ICon n e c ti o n Po i n tCo n ta in e r連接點(diǎn)對象連接點(diǎn)對象ICon n e c ti o n Po i n tICon n e c ti o n Po i n t接收器枚舉器枚舉器可連接對象 ?如何管理多個出接口 –每個出接口對應(yīng)一個連接點(diǎn)對象 –通過連接點(diǎn)枚舉器管理 ?對于每個出接口,如何管理多個客戶連接 –通過連接枚舉器管理多個連接 實現(xiàn)可連接對象 (源對象 )(一 ) ? 枚舉器 – 內(nèi)部對象,不需要類廠和 CLSID – 其含義就如同指針 —— 智能指針 – 枚舉器接口模板 class IEnumELT_T : public IUnknown { virtual HRESULT Next( ULONG celt, ELT_T *rgelt, ULONG *pceltFetched ) = 0。 virtual HRESULT Skip( ULONG celt ) = 0。 virtual HRESULT Reset( void ) = 0。 virtual HRESULT Clone( IEnumELT_T**ppenum ) = 0。 }。 枚舉器的用法 class IStringManager : public IUnknown { virtual IEnumString* EnumStrings(void) = 0。 }。 void SomeFunc(IStringManager * pStringMan) { String psz。 IEnumString * penum。 penum=pStringManEnumStrings()。 while (S_OK == penumNext(1, amp。psz, NULL)) { … //Do something with the string in psz and free it } penumRelease()。 return。 } 實現(xiàn)可連接對象 (源對象 )(二 ) ? IConnectionPointContainer接口 class IConnectionPointContainer : public IUnknown { virtual HRESULT EnumConnectionPoints(IEnumConnectionPoints **) = 0。 virtual HRESULT FindConnectionPoint(const IID *, IConnectionPoint **) = 0。 }。 ? IEnumConnectionPoints接口 class IEnumConnectionPoints : public IUnknown { virtual HRESULT Next( ULONG cConnections, IConnectionPoint **rgp, ULONG *pcFetched) = 0。 virtual HRESULT Skip( ULONG cConnections) = 0。 virtual HRESULT Reset(void) = 0。 virtual HRESULT Clone( IEnumConnectionPoints **ppEnum) = 0。 }。 實現(xiàn)可連接對象 (源對象 )(三 ) ? 連接點(diǎn)和 IConnectionPoint接口 class IConnectionPoint : public IUnknown { virtual HRESULT GetConnectionInterface( IID *pIID) = 0。 virtual HRESULT GetConnectionPointContainer( IConnectionPointContainer **ppCPC) = 0。 virtual HRESULT Advise( IUnknown *pUnk, DWORD *pdwCookie) = 0。 virtual HRESULT Unadvise( DWORD dwCookie) = 0。 virtual HRES
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號-1