STDMETHODIMP与STDMETHOD

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据你的描述,你在头文件中声明了一个指向 unsigned short 类型的指针 `imgData` 并初始化为 `nullptr`。然后,在 `CImgViewCtrl::BurnAnnotation` 函数中对其进行了复制和遍历操作,但在 `CImgViewCtrl::BurnScale` 函数中遍历时报错,指向了一个访问冲突的位置。 访问冲突通常是由于对已释放或无效的内存进行访问引起的。根据你的描述,可能是在 `CImgViewCtrl::BurnAnnotation` 函数中没有正确地分配内存或者释放了 `imgData` 的内存,导致在 `CImgViewCtrl::BurnScale` 函数中访问冲突。 为了解决这个问题,你可以检查以下几点: 1. 确保在 `CImgViewCtrl::BurnAnnotation` 函数中正确分配内存给 `imgData`,并将图像数据复制到其中。可以使用动态内存分配函数(如 `new` 或 `malloc`)分配足够的内存,并将图像数据复制到 `imgData`。 2. 在 `CImgViewCtrl::BurnAnnotation` 函数中,确保没有在遍历或修改 `imgData` 时越界访问或修改无效的内存位置。注意循环或迭代器的范围,确保在有效范围内进行操作。 3. 在 `CImgViewCtrl::BurnAnnotation` 函数中,确保没有释放 `imgData` 的内存,或者在 `CImgViewCtrl::BurnScale` 函数中重新分配内存给 `imgData`。如果在 `CImgViewCtrl::BurnAnnotation` 函数中释放了 `imgData` 的内存,那么在 `CImgViewCtrl::BurnScale` 函数中访问 `imgData` 将导致访问冲突。 总之,确保在正确的地方分配和释放内存,并避免越界访问或修改无效的内存位置,可以解决访问冲突的问题。如果问题仍然存在,请提供更多相关的代码片段以便我更具体地帮助你。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值