一、_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ù),指針指向的值會修改,且會讀取。