美文网首页
C++中的函数宏

C++中的函数宏

作者: 写下岁月的痕迹 | 来源:发表于2021-09-28 18:00 被阅读0次

    一、_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++中的函数宏

          本文链接:https://www.haomeiwen.com/subject/xizqnltx.html