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

正文內(nèi)容

com開發(fā)-文庫吧

2024-09-28 03:46 本頁面


【正文】 yObj::AddRef() { return m_pParentAddRef()。 } ULONG CDictionary::XDictionaryObj::Release () { return m_pParentRelease ()。 } “用嵌套類實(shí)現(xiàn) COM接口”原理 m_pData m_DictFilename[128] m_Ref m_nWordNumber m_nStructNumber QueryInterface AddRef Release ……. m_dictionaryObj m_spellCheckObj QueryInterface AddRef Release …… QueryInterface AddRef Release …… Vtable for IDictionary Vtable for ISpellCheck CDictionary vptr vptr CDictionary的非虛函數(shù) MFC:接口映射表 ? CCmdTarget類 ? CCmdTarget::m_dwRef為引用計(jì)數(shù) ?接口映射表與消息映射表非常類似 ?接口映射表:記錄了 CCmdTarget類中每一個(gè)嵌套類的接口 ID以及接口 vtable與父類 this指針之間的偏移量 ? offsetof宏:成員類與父類之間的偏移值 DECLARE_INTERFACE_MAP define DECLARE_INTERFACE_MAP() \ private: \ static const AFX_INTERFACEMAP_ENTRY _interfaceEntries[]。 \ protected: \ static AFX_DATA const AFX_INTERFACEMAP interfaceMap。 \ static const AFX_INTERFACEMAP* PASCAL _GetBaseInterfaceMap()。 \ virtual const AFX_INTERFACEMAP* GetInterfaceMap() const。 \ struct AFX_INTERFACEMAP_ENTRY { const void* piid。 size_t nOffset。 }。 struct AFX_INTERFACEMAP { ifdef _AFXDLL const AFX_INTERFACEMAP* (PASCAL* pfnGetBaseMap)()。 else const AFX_INTERFACEMAP* pBaseMap。 endif const AFX_INTERFACEMAP_ENTRY* pEntry。 }。 接口映射表定義 BEGIN_INTERFACE_MAP(CDictionary, CCmdTarget) INTERFACE_PART(CDictionary, IID_IDictionary, Dictionary) INTERFACE_PART(CDictionary, IID_ISpellCheck, SpellCheck) END_INTERFACE_MAP() 接口映射表的宏定義 define BEGIN_INTERFACE_MAP(theClass, theBase) \ const AFX_INTERFACEMAP* PASCAL theClass::_GetBaseInterfaceMap() \ { return amp。theBase::interfaceMap。 } \ const AFX_INTERFACEMAP* theClass::GetInterfaceMap() const \ { return amp。theClass::interfaceMap。 } \ AFX_COMDAT const AFX_DATADEF \ AFX_INTERFACEMAP theClass::interfaceMap = \ { amp。theClass::_GetBaseInterfaceMap, amp。theClass::_interfaceEntries[0], }。 \ AFX_COMDAT const AFX_DATADEF AFX_INTERFACEMAP_ENTRY theClass::_interfaceEntries[] = \ { \ define INTERFACE_PART(theClass, iid, localClass) \ { amp。iid, offsetof(theClass, m_xlocalClass) }, \ define END_INTERFACE_MAP() \ { NULL, (size_t)1 } \ }。 \ MFC版本的字典對(duì)象類定義 class CDictionary : public CCmdTarget { DECLARE_DYNCREATE(CDictionary) CDictionary()。 // protected constructor used by dynamic creation DECLARE_INTERFACE_MAP() ...... // IDictionary BEGIN_INTERFACE_PART(Dictionary, IDictionary) INIT_INTERFACE_PART(CDictionary, Dictionary) STDMETHOD_(BOOL, Initialize)()。 …… STDMETHOD_(void, FreeLibrary)()。 END_INTERFACE_PART_STATIC(Dictionary) // ISpellCheck BEGIN_INTERFACE_PART(SpellCheck, ISpellCheck) INIT_INTERFACE_PART(CDictionary, SpellCheck) STDMETHOD_(BOOL, CheckWord)(LPOLESTR, LPOLESTR *)。 END_INTERFACE_PART_STATIC(SpellCheck) }。 MFC版本的字典對(duì)象類實(shí)現(xiàn) STDMETHODIMP_(ULONG) CDictionary::XDictionary::AddRef() { METHOD_PROLOGUE_EX_(CDictionary, Dictionary) return pThisExternalAddRef()。 } ? METHOD_PROLOGUE_EX_宏定義: define METHOD_PROLOGUE_EX(theClass, localClass) \ theClass* pThis = ((theClass*)((BYTE*)this m_nOffset))。 \ AFX_MANAGE_STATE(pThism_pModuleState) \ pThis。 // avoid warning from piler \ CCmdTarget類實(shí)現(xiàn) IUnknown public: // data used when CCmdTarget is made OLE aware long m_dwRef。 LPUNKNOWN m_pOuterUnknown。 // external controlling unknown if != NULL DWORD m_xInnerUnknown。 // placeholder for inner controlling unknown public: // advanced operations void EnableAggregation()。 // call to enable aggregation void ExternalDisconnect()。 // forcibly disconnect LPUNKNOWN GetControllingUnknown()。 // get controlling IUnknown for aggregate creation CCmdTarget類實(shí)現(xiàn) IUnknown(續(xù) ) public: // these versions do not delegate to m_pOuterUnknown DWORD InternalQueryInterface(const void*, LPVOID* ppvObj)。 DWORD InternalAddRef()。 DWORD InternalRelease()。 // these versions delegate to m_pOuterUnknown DWORD ExternalQueryInterface(const void*, LPVOID* ppvObj)。 DWORD ExternalAddRef()。 DWORD ExternalRelease()。 CCmdTarget中 QueryInterface實(shí)現(xiàn) DWORD CCmdTarget::InternalQueryInterface(const void* iid, LPVOID* ppvObj) { // check local interfaces if ((*ppvObj = GetInterface(iid)) != NULL) { // interface was found add a reference ExternalAddRef()。 return S_OK。 } // check aggregates if ((*ppvObj = QueryAggregates(iid)) != NULL) return S_OK。 // interface ID not found, fail the call return (DWORD)E_NOINTERFACE。 } CCmdTarget中 ExternalXXX成員 實(shí)現(xiàn) DWORD CCmdTarget::ExternalAddRef() { // delegate to controlling unknown if aggregated
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1