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

正文內(nèi)容

第九章----面向?qū)ο蠓治雠c設(shè)計(jì)【西工大課件】-在線瀏覽

2024-11-10 15:01本頁面
  

【正文】 供模板包裝標(biāo)準(zhǔn)和復(fù)雜的結(jié)構(gòu)和算法 ? 但要注意減少對客戶應(yīng)用結(jié)構(gòu)的影響 一、組件概述 一、組件概述 二、 COM思想 三、 CORBA思想 四、 EJB思想 基于 UML描述的組件軟件研究 : COM思想--從 C++到 DLL再到 COM ? 1. C++ ? 如某一軟件廠商發(fā)布一個類庫 (CMath四則運(yùn)算 ),此時類庫的可執(zhí)行代碼將成為客戶應(yīng)用中不可分割的一部分。當(dāng)三個應(yīng)用程序都使用 CMath庫時,那么每個可執(zhí)行文件都包含 4MB的類庫代碼 (見圖)。問題還遠(yuǎn)不于此。此外別無他法了 。 在使用這項(xiàng)技術(shù)的時候, CMath的所有方法都將被加到 CMath dll 的引出表 (export list)中,而且鏈接器將會產(chǎn)生一個引入庫 (import library)。當(dāng)客戶鏈接引入庫時,有一些存根會被引入到可執(zhí)行文件中,它在運(yùn)行時通知裝載器動態(tài)裝載 CMath Dll。因?yàn)?C++類那既是接口也是實(shí)現(xiàn)。此時需要有二個 C++類,一個作為接口類另一個作為實(shí)現(xiàn)類。 HRESULT 其實(shí)就一個類型定義: ? typedef LONG HRESULT。讓我們看 IUnknow接口的定義文件是怎樣的。 ? [object]屬性是表明定義的是一個 COM接口。 ? [unique]屬性表明 null(空 )指針為一個合法的參數(shù)值。這是一個類型定義 ? cpp_quote這個比較有趣,這是一個在 idl文件寫注解的方法。 ? 注意:所有具有 out屬性的參數(shù)都需要是指針類型。 ? cpp_quote(//////////////////////////////////////////////////////////////////) ? cpp_quote(// IID_IUnknown and all other system IIDs are provided in ) ? cpp_quote(// Link that library in with your proxies, clients and servers) ? cpp_quote(//////////////////////////////////////////////////////////////////) ? HRESULT QueryInterface( [in] REFIID riid, [out, iid_is(riid)] void **ppvObject)。 ULONG Release()。 ? IUnkown接口定義了三個方法。 ? ULONG AddRef()。 ? 其中 AddRef和 Release()負(fù)責(zé)對象引用計(jì)數(shù)用的,而 QueryInterface()方法是用于查詢所實(shí)現(xiàn)接口用的。而當(dāng)客戶端在釋放 COM組件的某個接口時就需要調(diào)用 Release()方法。 一個比較簡單的 COM ? 此例子共有四個文件組成: ? 接口類定義文件 ? ? 主函數(shù)文件這里用來當(dāng)作COM的客戶端 ? 文件 ? ifndef INTERFACE_H ? define INTERFACE_H ? include ? //{7C8027EAA4ED467cB17E1B51CE74AF57} ? static const GUID IID_ISimpleMath = { 0x7c8027ea, 0xa4ed, 0x467c, { 0xb1, 0x7e, 0x1b, 0x51, 0xce, 0x74, 0xaf, 0x57 } }。 ? interface ISimpleMath : public IUnknown ? { public: virtual int Add(int nOp1, int nOp2) = 0。 ? virtual int Multiply(int nOp1, int nOp2) = 0。 }。 ? virtual int Fabonacci(int nOp1) = 0。 ? endif 一個比較簡單的 COM ? 文件首先 include 將 IUnknown 接口定義文件包括進(jìn)來。 ISmipleMath接口里定義了四個方法, ? 而 IAdvancedMath接口里定義了二個方法。 ? ? include ? class CMath : public ISimpleMath, public IAdvancedMath { private: ULONG m_cRef。 ? int calcFabonacci(int nOp)。 ? STDMETHOD_(ULONG, AddRef)()。 ? // ISimpleMath Method ? int Add(int nOp1, int nOp2)。 ? int Multiply(int nOp1, int nOp2)。 ? // IAdvancedMath Method ? int Factorial(int nOp)。 ? }。 else if(riid == IID_IAdvancedMath) *ppv = static_cast(this)。 else { *ppv = 0。 } reinterpret_cast(*ppv)AddRef()。 } STDMETHODIMP_(ULONG) CMath::AddRef() { return ++m_cRef。 // 使用臨時變量把修改后的引用計(jì)數(shù)值緩存起來 ? if(res == 0) // 因?yàn)樵趯ο笠呀?jīng)銷毀后再引用這個對象的數(shù)據(jù)將是非法的 ? delete this。 ? } ? 。 ? 此類為實(shí)現(xiàn)類,他實(shí)現(xiàn)了 ISmipleMath和 IAdvancedMath兩個接口類 (當(dāng)然也可以只實(shí)現(xiàn)一個接口類 )。當(dāng) m_cRef 為 0組件對象應(yīng)該自動刪除。 ? int main(int argc, char* argv[]) { ? ISimpleMath *pSimpleMath = NULL。 ? //創(chuàng)建對象實(shí)例,我們暫時這樣創(chuàng)建對象實(shí)例, COM有創(chuàng)建對象實(shí)例的機(jī)制 CMath *pMath = new CMath。pSimpleMath)。 ? //查詢對象實(shí)現(xiàn)的接口 IAdvancedMath ? pSimpleMathQueryInterface(IID_IAdvancedMath, (void **)amp。 if(pAdvMath) ? cout 10 Fabonacci is pAdvMathFabonacci(10) endl。 ? pSimpleMathRelease()。 } ? 此文件相當(dāng)于客戶端的代碼,首先創(chuàng)建一個 CMath對象 ,再根據(jù)此對象去查詢所需要的接口,如果正確得到所需接口指針,再調(diào)用接口的方法,最后再將接口的釋放掉。軟件組件按照一定的接口模式組織成組件軟件。 ? COM除提供組件間的接口標(biāo)準(zhǔn)外,還引用了面向?qū)ο蟮乃枷?。一個組件程序可以包含多個COM對象,一個 COM對象也可實(shí)現(xiàn)多個接口。 ? COM的發(fā)展是經(jīng)過 DDE, OLE1, VBX, OLE2, DCOM, ACTIVEX, COM+。 二、 COM思想 COM具有的特點(diǎn) ? 二進(jìn)制特性 ? 接口不變性 ? 繼承性:類繼承說明繼承,同時也實(shí)現(xiàn)繼承;接口繼承只說明繼承。多態(tài)性使得客戶用以同樣的方法處理不同的對象,或不同類型的對象,只要它們實(shí)現(xiàn)了同樣的接口。 virtual HRESULT _std
點(diǎn)擊復(fù)制文檔內(nèi)容
電大資料相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1