描述:
#if !defined(_COM_SMARTPTR)
#if !defined(_INC_COMIP)
#include <comip.h>
#endif
#define _COM_SMARTPTR _com_ptr_t
#define _COM_SMARTPTR_LEVEL2 _com_IIID
#endif
#if defined(_COM_SMARTPTR)
#if !defined(_COM_SMARTPTR_TYPEDEF)
#if defined(_COM_SMARTPTR_LEVEL2
#define _COM_SMARTPTR_TYPEDEF(Interface, IID) \
typedef _COM_SMARTPTR<_COM_SMARTPTR_LEVEL2<Interface, &IID> > \
Interface ## Ptr
#else
#define _COM_SMARTPTR_TYPEDEF(Interface, IID) \
typedef _COM_SMARTPTR<Interface, &IID> \
Interface ## Ptr
#endif
#endif
#endif
#if !defined(_COM_NO_STANDARD_GUIDS_)
//////////////////////////////////////////////////////////
#define _COM_SMARTPTR_TYPEDEF(Interface, IID) \
上面这句是不是把前面一串字符定义为"\"呢?
//////////////////////////////////////////////////////////
typedef _COM_SMARTPTR<_COM_SMARTPTR_LEVEL2<Interface, &IID> > \
Interface ## Ptr
上面两句话又是什么意思呢?
解决方案1:
"\"在字符串中表示下一行和本行作为一行,便于格式化书写文本;
"##"表示连接字符串;
上边的宏展开实例是这样的:
_COM_SMARTPTR_TYPEDEF(interface, interfaceID)
展开后为:
typedef _COM_SMARTPTR<_COM_SMARTPTR_LEVEL2 <interface, &interfaceID> > interfacePtr
注意最后的"interfacePtr"是"interface"和"Ptr"连接而来。