- #define STDMETHODCALLTYPE __stdcall
- #define STDMETHODVCALLTYPE __cdecl
#define STDMETHODCALLTYPE __stdcall
#define STDMETHODVCALLTYPE __cdecl
STDMETHODIMP的定义如下:
- #defineSTDMETHODIMP HRESULT STDMETHODCALLTYPE
- #define STDMETHODIMP_(type) type STDMETHODCALLTYPE
#defineSTDMETHODIMP HRESULT STDMETHODCALLTYPE
#define STDMETHODIMP_(type) type STDMETHODCALLTYPE
STDMETHOD的定义如下:
- #define STDMETHOD(method) virtual COM_DECLSPEC_NOTHROW HRESULT STDMETHODCALLTYPE method
- #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运行库的函数都才用这样方式。