欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
一個(gè)MFC宏實(shí)現COM接口的問(wèn)題

1.  問(wèn)題提出:

《COM原理與應用》中的第五章的例子中的INIT_INTERFACE_PART(CDictionary, Dictionary)


DictionaryObj.h 文件中有以下宏定義:

BEGIN_INTERFACE_PART(Dictionary, IDictionary) 

INIT_INTERFACE_PART(CDictionary, Dictionary)

STDMETHOD_(BOOL, Initialize)();

STDMETHOD_(BOOL, LoadLibrary)(LPOLESTR);

STDMETHOD_(BOOL, InsertWord)(LPOLESTR, LPOLESTR); 

STDMETHOD_(void, DeleteWord)( LPOLESTR);

STDMETHOD_(BOOL, LookupWord)(LPOLESTR, LPOLESTR *);

STDMETHOD_(BOOL, RestoreLibrary)(LPOLESTR);

STDMETHOD_(void, FreeLibrary)();

END_INTERFACE_PART_STATIC(Dictionary)

2.候sir說(shuō)過(guò):“源碼面前了無(wú)秘密”??纯催@些宏定義的源代碼:

#define BEGIN_INTERFACE_PART(localClass, baseClass) \    //這個(gè)宏在代碼中插入如下代碼一看就知道聲明了IUnknown的三個(gè)方法

class X##localClass : public baseClass \

{ \

public: \

        STDMETHOD_(ULONG, AddRef)(); \

        STDMETHOD_(ULONG, Release)(); \

        STDMETHOD(QueryInterface)(REFIID iid, LPVOID* ppvObj); \

#ifndef _AFX_NO_NESTED_DERIVATION             //這里進(jìn)行了判斷,所以有時(shí)候不要也可以,最好要

#define INIT_INTERFACE_PART(theClass, localClass) \

        size_t m_nOffset; \                     //紀錄指針偏移量

        INIT_INTERFACE_PART_DERIVE(theClass, localClass) \

#define INIT_INTERFACE_PART_DERIVE(theClass, localClass) \

        X##localClass() \

               { m_nOffset = offsetof(theClass, m_x##localClass); } \

#else

#define INIT_INTERFACE_PART(theClass, localClass)

#define INIT_INTERFACE_PART_DERIVE(theClass, localClass)

#endif

看了源碼,其實(shí)我們已經(jīng)可以清楚這些宏到底做了些什么。

1 首先你上面的問(wèn)題:


就以原例說(shuō)明:

baseClass:是指接口類(lèi)IDictionary


localClass:是指實(shí)現當前接口IDictionary的嵌套類(lèi)


theClass:這個(gè)才是真正實(shí)現接口的嵌套類(lèi)!

好,再結合一個(gè)msdn的例子:

class CPrintEditObj : public CCmdTarget

{

public:

    // member data and member functions for CPrintEditObj go here

// Interface Maps

protected:

    DECLARE_INTERFACE_MAP()

    BEGIN_INTERFACE_PART(EditObj, IEditInterface)

        STDMETHOD_(void, EditObject)();

    END_INTERFACE_PART(EditObj)

    BEGIN_INTERFACE_PART(PrintObj, IPrintInterface)

        STDMETHOD_(void, PrintObject)();

    END_INTERFACE_PART(PrintObj)

};

在這個(gè)例子中CPrintEditObj是嵌套類(lèi),實(shí)現了兩個(gè)接口IEditInterface和IPrintInterface,而:

BEGIN_INTERFACE_PART(EditObj,IEditInterface) 實(shí)現了IEditInterface接口

BEGIN_INTERFACE_PART(PrintObj, IPrintInterface) 實(shí)現了IPrintInterface接口

宏源碼中的:

#define INIT_INTERFACE_PART_DERIVE(theClass, localClass) \

        X##localClass() \

               { m_nOffset = offsetof(theClass, m_x##localClass); } \

紀錄下了m_x EditObj和m_x PrintObj與包容類(lèi)CPrintEditObj的地址偏移。以便在通過(guò)CPrintEditObj嵌套類(lèi)查詢(xún)IEditInterface 和IPrintInterface接口的時(shí)候能返回正確的接口指針。

 


本文來(lái)自CSDN博客,轉載請標明出處:http://blog.csdn.net/newcore/archive/2005/06/02/386714.aspx

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
COM開(kāi)發(fā)中用到的宏說(shuō)明集合
MFC COM 筆記
Linux usb子系統(一):子系統架構
wpa_supplicant 初始化流程分析
Linux下USB core的工作原理及設備驅動(dòng)技術(shù)|Linux
Objective-C基礎教程筆記
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久