C++中的函数宏

一、_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: 表示输入输出参数,指针指向的值会修改,且会读取。

你可能感兴趣的:(C++中的函数宏)