STDMETHODIMP与STDMETHOD

[cpp] view plain copy print ?
  1. #define STDMETHODCALLTYPE       __stdcall   
  2. #define STDMETHODVCALLTYPE      __cdecl  
#define STDMETHODCALLTYPE       __stdcall
#define STDMETHODVCALLTYPE      __cdecl

 

STDMETHODIMP的定义如下:

[cpp] view plain copy print ?
  1. #defineSTDMETHODIMP            HRESULT STDMETHODCALLTYPE   
  2. #define STDMETHODIMP_(type)     type STDMETHODCALLTYPE  
#defineSTDMETHODIMP            HRESULT STDMETHODCALLTYPE
#define STDMETHODIMP_(type)     type STDMETHODCALLTYPE

STDMETHOD的定义如下:

[cpp] view plain copy print ?
  1. #define STDMETHOD(method)        virtual COM_DECLSPEC_NOTHROW  HRESULT STDMETHODCALLTYPE  method   
  2. #define STDMETHOD_(type,method)  virtual COM_DECLSPEC_NOTHROW  type STDMETHODCALLTYPE  method  
#define STDMETHOD(method)        virtual COM_DECLSPEC_NOTHROW  HRESULT STDMETHODCALLTYPE  method
#define STDMETHOD_(type,method)  virtual COM_DECLSPEC_NOTHROW  type STDMETHODCALLTYPE  method

 

你可以看出STDMETHOD是定义了接口中的方法,是虚函数,而STDMETHODIMP定义了具体实现类中的方法,是普通的函数。

HRESULT是COM中统一的返回类型,而加上__stdcall是为了可以被VB,Delphi,Java等其他的OO语言使用。

 

STDMETHODCALLTYPE(展开后是_stdcall)不能忽略,它表示函数返回后清理堆栈由函数自己本身还原,通常多数的WINDOWS API都采用这种方式。
STDMETHODVCALLTYPE(展开后是_cdecl),是由函数调用者一方还原堆栈的,一般c运行库的函数都才用这样方式。

你可能感兴趣的:(MFC)