美文网首页
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++中预处理器宏存在的问题,在C++中如何用内联函数解决这些问题以及使用内联函数的方针和内联函数的工作机制...

  • C++中的函数宏

    一、_T()函数与_L()函数 1、_T()函数: 它的作用是使程序支持Unicode编码,它是双字节方式,方便处...

  • C++ 函数(3)

    1. 宏函数 宏函数的缺点: 宏看起来像一个函数调用,但是会有隐藏一些难以发现的错误。 在C++中,预处理器不允许...

  • C++ 命名空间namespace

    本文转载自:C++ 命名空间namespace 在C++中,名称(name)可以是符号常量、变量、宏、函数、结构、...

  • extern "C"和函数异常的宏定义(c vs c++)

    这是libev中来自ev.h的一段宏定义 c++中函数定义中的throw():

  • iOS [Objective-C] 中的Debug表达式

    表1:预定义的宏和C/C++/Objective-C调试函数 表2:OBjective-C中的调试函数

  • C++inline的初步研究

    C++的inline函数在编译阶段会被替换成函数体中的内容,与宏定义不同的时,宏定义是单纯的字面替换,无法检验语法...

  • c++技巧

    使用c/c++宏进行编程 c/c++中宏的是在预处理的过程中进行展开,可以用来进行函数的声明和定义. 在阅读lib...

  • C++ assert

    断言,是宏,而非函数。assert 宏的原型定义在 (C)、(C++)中。其作用是如果它的条件返回错误,则终止程...

  • NS_INLINE 内联函数

    1 内联函数与宏定义 C++ 语言支持函数内联,其目的是为了提高函数的执行效率(速度)。在C程序中,可以用宏代码提...

网友评论

      本文标题:C++中的函数宏

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