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

正文內(nèi)容

com接口與對象-展示頁

2024-10-11 21:52本頁面
  

【正文】 virtual int Length()=0。 public: virtual void Func1(void) virtual void Func2(void) }。 }。 const char*Find(const char *psz)。 public: CMyString(const char * psz)。 class CMyString { private: char *m_psz。 int Length()。 ~IMyString()。 endif class EXPORTORIMPORT IMyString { private: CMyString *m_pthis。 }。 const char*Find(const char *psz)。 public: CMyString(const char * psz)。 } int CMyString::Length() { return strlen(m_psz)。 } CMyString::~CMyString() { delete [] m_psz。 設(shè)計(jì) COM接口 —— 從 C++入手 (續(xù) ) ?C++類的實(shí)現(xiàn) CMyString::CMyString(const char * psz) : m_psz( new char[psz ? strlen(psz)+1 :1]) { if ( psz ) strcpy(m_psz,psz)。 int Length()。 ~CMyString()。COM接口與對象 潘愛民 內(nèi)容 ?組件的接口 ?COM接口 ?COM IDL ?COM對象 從歷史看 COM ?COM產(chǎn)生的背景 – 93年因?yàn)?OLE 2的需要而產(chǎn)生 – OLE 1的缺陷 ?COM又從 OLE中脫穎而出 – COM的優(yōu)勢不限于 OLE – COM成為 Microsoft跟上 Inter的一項(xiàng)重要基礎(chǔ)技術(shù) ?今天的 Windows平臺上, COM無處不在 COM基礎(chǔ) —— 三個(gè)概念 ?COM組件 –可獨(dú)立發(fā)布的二進(jìn)制組件 –在 Windows平臺上為 DLL或者 EXE ?COM對象 –通過 COM接口提供服務(wù) –符合 OO中對象的基本概念 ?COM接口 –客戶與對象之間的協(xié)議,對象實(shí)現(xiàn) COM接口,客戶使用 COM接口 如何設(shè)計(jì)? ?COM組件 –為方便起見,只討論 Windows平臺上DLL類型的組件 ?COM對象 –如何標(biāo)識一個(gè)對象?對象以什么形式存在?客戶如何創(chuàng)建對象? –對象如何暴露接口?一個(gè)或是多個(gè)? ?COM接口 –要求:跨編譯器、跨語言、跨平臺 設(shè)計(jì) COM接口 —— 從 C++入手 ?C++類:接口與實(shí)現(xiàn)的分離 –接口:類的 public部分 class CMyString { private: char *m_psz。 public: CMyString(const char * psz)。 const char*Find(const char *psz)。 }。 else m_psz[0] = 0。 } const char*CMyString::Find(const char *psz) { return strstr(m_psz,psz)。 } C++類的鏈接 linking ?靜態(tài)鏈接 –許多類庫的做法 –編譯時(shí)刻的鏈接 ?靜態(tài)鏈接的缺點(diǎn) –代碼重復(fù):多個(gè)程序各有自己的代碼,需要更多的內(nèi)存 –客戶程序占據(jù)更多的外存空間 –庫代碼更新需要重新編譯所有的客戶程序 C++類的鏈接 linking(續(xù) ) ?動態(tài)鏈接 –運(yùn)行時(shí)刻的鏈接 ?動態(tài)鏈接形式 –編譯時(shí)刻通過引入庫 –運(yùn)行時(shí)刻完全動態(tài) ?Dll Hell ifdef MYSTRINGDLL define EXPORTORIMPORT _declspec(dllexport) else define EXPORTORIMPORT _declspec(dllimport) endif class EXPORTORIMPORT CMyString { private: char *m_psz。 ~CMyString()。 int Length()。 C++接口如何走向 COM接口 ?動態(tài)鏈接符合 COM的需要 ?C++中類形式的接口存在的問題 –客戶看到了什么? –若用 Visual C++ ??0CMyStringQAEPBDZ ??1CMyStringQAEXZ ?FindCMyStringQAEPBDPBDZ ?LengthCMyStringQAEHXZ 客戶眼中的 C++類 (續(xù) ) ?如果是 Borland C++編譯器 () CMyString$bctr$qpxc CMyString$bdtr$qv CMyStringFind$qpxc CMyStringLength$qv ?問題 1:名字沖突 命名沖突解決方案 1 ?模塊定義文件 (.def)中給出別名 LIBRARY MYSTRING EXPORTS CMyString$bctr$qpxc=??0CMyStringQAEPBDZ CMyString$bdtr$qv=??1CMyStringQAEXZ CMyStringFind$qpxc=?FindCMyStringQAEPBDPBDZ CMyStringLength$qv=?LengthCMyStringQAEHXZ 命名沖突解決方案 2 ?模塊定義文件 (.def)中給出序號別名 LIBRARY MYSTRING EXPORTS ??0CMyStringQAEPBDZ 1 ??1CMyStringQAEXZ 2 ?FindCMyStringQAEPBDPBDZ 3 ?LengthCMyStringQAEHXZ 4 LIBRARY MYSTRING EXPORTS CMyString$bctr$qpxc 1 CMyString$bdtr$qv 2 CMyStringFind$qpxc 3 CMyStringLength$qv 4 命名沖突解決方案 3 ?使用 C++類的 vtable ?C++類的 vtable不隨編譯器而變化 ?vtable包含了各個(gè)函數(shù)的原型,順序固定,每個(gè)函數(shù)的參數(shù)、返回類型等,函數(shù)名并不重要 ?vtable要求這些接口函數(shù)必須是虛函數(shù) ?客戶如何得到 vtable? –仍然需要有一種辦法來創(chuàng)建 C++類 – new/delete? 需要對象的二進(jìn)制結(jié)構(gòu) ——問題 2 C++對象的二進(jìn)制結(jié)構(gòu) ?C++的封裝是語法上的封裝,而不是二進(jìn)制封裝 ?new/delete是編譯器相關(guān)的 –編譯器不僅要知道 public信息,也要知道private信息 ?C++對象的二進(jìn)制結(jié)構(gòu)是編譯器相關(guān)的 ?即使客戶看到的 C++類公開接口沒有變化,但是 C++類的實(shí)現(xiàn)改變了,仍然會打破客戶與對象之間的連接 C++對象與客戶之間的連接問題 ?客戶與 C++對象之間的連接點(diǎn)越小越好 –只有接口部分必要的信息才放入接口 –把 C++類的實(shí)現(xiàn)細(xì)節(jié)與接口分開 –提取出針對所有編譯器都不變的因素作為客戶與對象共享的接口信息 ?方案 1:句柄 句柄方案 ?方案 1:句柄 ifndef CMyString class CMyString。 public: IMyString(const char * psz)。 const char*Find(const char *psz)。 }。 int m_nLength。 ~CMyString()。 int Length()。 純虛基類方案 ?前提條件: –在給定平臺上所有的編譯器都會產(chǎn)生同樣的二進(jìn)制結(jié)構(gòu) –純虛函數(shù)在單繼承情況下滿足這一條件 ?純虛基類只包含虛函數(shù),限定每個(gè)虛函數(shù)的調(diào)用習(xí)慣 ?對于跨平臺的情形,我們肯定要通過中間層,所以暫時(shí)可以不考慮 虛函數(shù)的繼承布局情況 class B : pulic A { private : int value1。 變量 偏移量 vptr 0 value1 4 B::Func1 B::Func2 vtable 純虛基類方案例子 ?解決了名字沖突 ?解決了 C++類的二進(jìn)制布局不兼容問題 – 客戶只看到 vtable, 沒有看到其他的實(shí)現(xiàn)細(xì)節(jié) – 保證不同語言編寫的程序可以互操作 – 在不改變接口的情況下,可以單獨(dú)升級客戶或者
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1