STDMETHODIMP与STDMETHOD

本文详细解析了STDMETHODIMP和STDMETHOD在COM中的定义及用法,包括它们如何用于接口方法的声明和实现,以及与__stdcall和__cdecl调用约定的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. #define STDMETHODCALLTYPE       __stdcall   
  2. #define STDMETHODVCALLTYPE      __cdecl  
#define STDMETHODCALLTYPE       __stdcall
#define STDMETHODVCALLTYPE      __cdecl

 

STDMETHODIMP的定义如下:

  1. #defineSTDMETHODIMP            HRESULT STDMETHODCALLTYPE   
  2. #define STDMETHODIMP_(type)     type STDMETHODCALLTYPE  
#defineSTDMETHODIMP            HRESULT STDMETHODCALLTYPE
#define STDMETHODIMP_(type)     type STDMETHODCALLTYPE

STDMETHOD的定义如下:

  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运行库的函数都才用这样方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值