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

正文內(nèi)容

十一自動化對象-資料下載頁

2024-10-12 10:50本頁面

【導讀】何關系,碰巧使用了同一個詞而已……COM不僅追求C++編譯器的中立,而且追求語言的獨立性.因此它。使用IDL語言來描述接口.然后在IDL到具體的語言之間建立映射.但是一些數(shù)據(jù)類型在有些語言中難以表達。比如復雜的結構類型,指針類型,函數(shù)指針等等在一些弱類型的高級語言中比如Java,性受到很多的限制。因此,MS使用類型庫來解決這個問題.類型庫文件是一個二進制。文件,后綴為.MIDL工具編譯idl文件可以產(chǎn)生類型庫文件,等等.本質(zhì)上它等價于描述接口的C/C++頭文件.一個類型庫可以包含多個COM對象,這些COM對象可以實現(xiàn)多個。容主要指明類型庫所描述的對象的載體的位置.VB,Java等語言的開發(fā)者不需要直接面對類型庫.相反,它是由編。并不是只有IDE的開發(fā)者才知道怎樣解析類型庫.為了操作類型。地構造客戶應用程序,從而使用COM對象.為了支持晚綁定,COM定義了一個接口,用來表達這種翻譯機制,這個接口

  

【正文】 0 [1].vt=VT_I4。 //第二個參數(shù)也是長整數(shù) dms. rgvarg[1].lVal=20。 //值為 20 VARIANTARG vaResult。 //輸出結果的參數(shù) VariantInit(amp。vaResult)。 hr=pDInvoke(dispid, IID_NULL, LOCAL_SYSTEM_DEFAULT, DISPATCH_METHOD,amp。dispparams,amp。vaResult,0,NULL)。 //使用invoke,根據(jù)分發(fā) ID進行計算 .輸入計算參數(shù) ,提供返回參數(shù) pDRelease()。 //釋放接口 20 ? 注意以上計算過程 ,我們只是使用了分發(fā)接口 ,我們猜測了加法的名字和參數(shù) .我們事先沒有使用到自動化對象的任何信息 .不需要包含接口聲明的頭文件 . 編譯時刻沒有進行任何類型檢查 . 如果猜測失誤將引起運行時錯誤 . 21 DISPID綁定 ? 如果提供類型庫 ,那么就可以在編譯時進行類型檢查 . ? VB中使用 Reference導入類型庫 .我們就可以象 VB中固有的數(shù)據(jù)類型一樣使用 COM對象 .編譯器將根據(jù)組件中的類型信息檢查代碼中的語法和參數(shù)類型 . VB為方法和屬性緩存一個 DISPID. 避免在運行時刻去查詢方法或?qū)傩缘姆职l(fā) ID. 以上措施 ,可以避免出錯 ,提高性能 . ? 組件的接口改變時 ,要重新編譯客戶程序 . Dim obj as New (10,20) //返回 30 不是猜測的 ! 如果不符合 ,則編譯會出錯 ! 這是類型庫起的作用 . 下面看 C++中如何使用 DISPID綁定 MFC提供了 COleDispatchDriver類 ,可以用來使用 DISPID綁定來訪問自動化對象 : 22 ? COleDispatchDriver類是 MFC提供的封裝類,它通過自動化對象的類型庫把原自動化對象的方法和屬性的分發(fā) ID硬性地記錄下來 , 把原來的方法和屬性在封裝類中進行封裝 . 使得用戶避免復雜的invoke參數(shù)序列, COleDispatchDriver 有一個數(shù)據(jù)成員m_lpDispatch,它包含了對應組件的 IDispatch接口指針。COleDispatchDriver提供了幾個成員函數(shù)包括 InvokeHelper GetProperty SetProperty, 這三個函數(shù)通過 m_lpDispatch調(diào)用invoke函數(shù)。 COleDispatchDriver的其他成員管理 IDispatch接口指針,CreateDispatch根據(jù) CLSID創(chuàng)建自動化對象,并把 IDispatch接口指針賦給 m_lpDispatch成員。 AttachDispatch使得當前的COleDispatchDriver與某個自動化對象聯(lián)系起來。DetachDispatch則取消這種聯(lián)系。 23 ? 兩種使用方式: 1. 根據(jù)組件的類型庫生成 COleDispatchDriver的派生類。從ClassWizard對話框的 Add Class中選取 From a type library,指定類型庫文件, IDE為我們生成 COleDispatchDriver的派生類的派生類。針對原自動化對象的屬性和方法分別生成此派生類的函數(shù)。這些函數(shù)在實現(xiàn)時調(diào)用 COleDispatchDriver的 SetProperty, GetProperty和 InvokerHelper函數(shù)。 2. 如果我們已經(jīng)得到了自動化對象的 IDispatch指針,(如果沒有,當然可以調(diào)用 CreateDispatch等方法 .)使用AttachDispatch把自動化對象與 COleDispatchDriver對象聯(lián)系起來通過 SetProperty、 GetProperty訪問對象的屬性,通過 InvokerHelper訪問對象的方法。 24 ? 以第一種方法為例 ,使用 IDE的添加類向?qū)?from type 型庫 ,則產(chǎn)生以下類 : class IOMath::public COleDispatchDriver {…… public: long Add(long Op1,long Op2)。 long Substract(long Op1,long Op2)。 long Multiply(long Op1,long Op2)。 long Divide(long Op1,long Op2)。 } long IOMath:: Add(long Op1,long Op2) { static BYTE params[]=VTS_I4 VTS_I4。 long result。 InvokeHelper(0x1, DISPATCH_METHOD, VT_I4, amp。result, params, lOp1,lOp2)。 25 ? 如果實現(xiàn)了雙接口 ,又有類型庫的支持 .那么就可以使用早綁定 .實際上這就是一般的 COM對象的使用方式 .即直接使用虛表來調(diào)用接口的方法 .而沒有使用 GetIDsofName和 Invoke函數(shù) . ? 在 VB中使用 Reference引進類型庫后 .代碼與前一種方法一樣 . ? Dim obj as New (10,20) 而 C++語言則是按照普通的 COM接口一樣 ,不用理會分發(fā)接口即可 . 26 5自動化對象編程實踐 1. MFC的支持 2. ATL的支持 見 原理 第五章 ,第十一章 .以及其他文檔
點擊復制文檔內(nèi)容
教學課件相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1