C++中的函數(shù)宏

一、_T()函數(shù)與_L()函數(shù)

1、_T()函數(shù):

它的作用是使程序支持Unicode編碼,它是雙字節(jié)方式,方便處理雙字節(jié)字符。

例:_T("Hello")

2、_L()函數(shù):

它的作用同_T()函數(shù),便是字符串資源為Unicode。

3、_T()和_L()的區(qū)別:

_L()不管使用哪種方式編譯,一律以Unicode方式保存;而_T()只有在一Unicode方式編譯,才以Unicode方式保存。

二、STDMETHOD()與STDMETHOD_()

1、STDMETHOD():

定義了一個(gè)返回HRESULT類型的虛方法;
例子:

  1、STDMETHOD(UpdateDialog)();
  2、STDMETHOD(SetPropData)(DWORD dwPropID, LPBYTE pData, DWORD cbData) PURE;

展開后變?yōu)椋?/p>

virtual HRESULT __stdcall UpdateDialog(); 
virtual HRESULT __stdcall SetPropData(DWORD dwPropID, LPBYTE pData, DWORD cbData) = 0; 

例1中UpdateDialog()方法沒有帶參數(shù)虛函數(shù),而例2中SetPropData((DWORD dwPropID, LPBYTE pData, DWORD cbData)方法是帶參數(shù)的純虛函數(shù)。
注:PURE:擴(kuò)展了c++的“=0”,使其成為純虛函數(shù)。

2、STDMETHOD_():

定義了一個(gè)返回指定類型的虛方法;
例子:

1、STDMETHOD_(ULONG32, AddRef) (DWORD data);
2、STDMETHOD_(ULONG32, Release) () PURE;

展開后變?yōu)椋?/p>

virtual ULONG32 __stdcall AddRef(DWORD data); 
virtual ULONG32 __stdcall Release() = 0; 

注:STDMETHOD()和STDMETHOD_()有對應(yīng)的宏用于方法實(shí)現(xiàn)——STDMETHODIMP和STDMETHODIMP_()。

三、DECLARE_INTERFACE(A)和DECLARE_INTERFACE_(A, B)

1、DECLARE_INTERFACE(A)

此宏用于創(chuàng)建一個(gè)不從其他接口繼承的接口。
例子:

DECLARE_INTERFACE(ICiplTVTuning) {
  STDMETHOD(UpdateDialog)();
  STDMETHOD(SetPropData)(DWORD dwPropID, LPBYTE pData, DWORD cbData) PURE;
};

2、DECLARE_INTERFACE_(A, B)

此宏用于創(chuàng)建一個(gè)從其他接口繼承的接口,參數(shù)A表示新接口的名字,參數(shù)B表示被A繼承的接口的名字(超類)。
例子:

DECLARE_INTERFACE_(ICiplTVTuning, IUnknown) {
  STDMETHOD(UpdateDialog)();
  STDMETHOD(SetPropData)(DWORD dwPropID, LPBYTE pData, DWORD cbData) PURE;
};

四、IN、OUT、INOUT

這些宏只在邏輯上起作用。
IN: 表示輸入?yún)?shù),指針指向的值不會修改;
OUT: 表示輸出參數(shù),指針指向的值會修改,且不會讀;
INOUT: 表示輸入輸出參數(shù),指針指向的值會修改,且會讀取。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容