一、_T()函数与_L()函数
1、_T()函数:
它的作用是使程序支持Unicode编码,它是双字节方式,方便处理双字节字符。
例:_T("Hello")
2、_L()函数:
它的作用同_T()函数,便是字符串资源为Unicode。
3、_T()和_L()的区别:
_L()不管使用哪种方式编译,一律以Unicode方式保存;而_T()只有在一Unicode方式编译,才以Unicode方式保存。
二、STDMETHOD()与STDMETHOD_()
1、STDMETHOD():
定义了一个返回HRESULT类型的虚方法;
例子:
1、STDMETHOD(UpdateDialog)();
2、STDMETHOD(SetPropData)(DWORD dwPropID, LPBYTE pData, DWORD cbData) PURE;
展开后变为:
virtual HRESULT __stdcall UpdateDialog();
virtual HRESULT __stdcall SetPropData(DWORD dwPropID, LPBYTE pData, DWORD cbData) = 0;
例1中UpdateDialog()方法没有带参数虚函数,而例2中SetPropData((DWORD dwPropID, LPBYTE pData, DWORD cbData)方法是带参数的纯虚函数。
注:PURE:扩展了c++的“=0”,使其成为纯虚函数。
2、STDMETHOD_():
定义了一个返回指定类型的虚方法;
例子:
1、STDMETHOD_(ULONG32, AddRef) (DWORD data);
2、STDMETHOD_(ULONG32, Release) () PURE;
展开后变为:
virtual ULONG32 __stdcall AddRef(DWORD data);
virtual ULONG32 __stdcall Release() = 0;
注:STDMETHOD()和STDMETHOD_()有对应的宏用于方法实现——STDMETHODIMP和STDMETHODIMP_()。
三、DECLARE_INTERFACE(A)和DECLARE_INTERFACE_(A, B)
1、DECLARE_INTERFACE(A)
此宏用于创建一个不从其他接口继承的接口。
例子:
DECLARE_INTERFACE(ICiplTVTuning) {
STDMETHOD(UpdateDialog)();
STDMETHOD(SetPropData)(DWORD dwPropID, LPBYTE pData, DWORD cbData) PURE;
};
2、DECLARE_INTERFACE_(A, B)
此宏用于创建一个从其他接口继承的接口,参数A表示新接口的名字,参数B表示被A继承的接口的名字(超类)。
例子:
DECLARE_INTERFACE_(ICiplTVTuning, IUnknown) {
STDMETHOD(UpdateDialog)();
STDMETHOD(SetPropData)(DWORD dwPropID, LPBYTE pData, DWORD cbData) PURE;
};
四、IN、OUT、INOUT
这些宏只在逻辑上起作用。
IN: 表示输入参数,指针指向的值不会修改;
OUT: 表示输出参数,指针指向的值会修改,且不会读;
INOUT: 表示输入输出参数,指针指向的值会修改,且会读取。
网友评论