C ++:类中的回调

全能的

我的课有点复杂。

在这个课上,我有一个参考:

Private:
        IEtApiPtr _pIEtApi;

IEtApiPtr在.tlh文件中定义:

_COM_SMARTPTR_TYPEDEF(IEtApi, __uuidof(IEtApi));

IEtApiPtr具有一个名为“ SetRawDataCB”的空白

  virtual HRESULT __stdcall SetRawDataCB (
    /*[in]*/ long address,
    /*[in]*/ long userData,
    /*[out,retval]*/ enum ApiError * pRetVal ) = 0;

我在该类中定义了一个回调函数:

void CETAPI::RawDataCB(RawData& r, void* userData)
{
    //do something
}

现在我想使用安装回调

_pIEtApi->SetRawDataCB((long)(__int64)(&RawDataCB),0,&result);

...编译器告诉我“错误C2276:绑定成员函数的表达式无效的操作”。

我在这里做错了什么?

阿普里里

这是行不通的,因为RawDataCB成员函数不是全局函数。您可以RawDataCB按如下所示在类中声明为静态函数,这将起作用。但是,this除非您将其作为参数添加到RawDataCB并可能成为RawDataCB朋友(如成员函数那样)来访问该类的私有数据,否则您将不再有权访问该指针(即没有成员变量)可以通过如下更新函数声明来完成:

class CETAPI {
  static void RawDataCB(RawData& r, void* userData);
};

或者,您可以将指针传递RawDataCB为成员函数指针,而不是函数指针。成员函数指针可以按以下方式进行操作,因此您只需将类型的对象传递RawDataCBType给即可SetRawDataCB

typedef void (CETAPI::*RawDataCBType)(RawData&, void*); // typedef the member function pointer type
RawDataCBType pmf = &CETAPI::RawDataCB; // create and initialize a pointer to the member function
pCETAPIObject->*pmf(r, userData); // call the member function on an object of type CETAPI 

是一篇很好的文章,讨论了成员指针。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 C++ 类中访问 C 风格的回调

来自分类Dev

C ++类中的成功回调Emscripten FETCH API

来自分类Dev

C ++中的回调函数

来自分类Dev

C中的同步回调

来自分类Dev

C ++:类内的EnumDisplayMonitors回调

来自分类Dev

C ++ 11中的C风格回调

来自分类Dev

在C回调中捕获变量

来自分类Dev

C#中的匿名接口回调

来自分类Dev

像Java中的C ++回调

来自分类Dev

在C回调中捕获变量

来自分类Dev

如何将静态逻辑重构为实现由C ++中的参数触发的回调函数的通用类

来自分类Dev

我如何在C ++类中实现CreateThread-LPTHREAD_START_ROUTINE类型的ThreadProc回调函数

来自分类Dev

在C ++中实现回调时出现c ++ -fpermissive错误

来自分类Dev

回调函数C ++

来自分类Dev

JNI C ++回调

来自分类Dev

C ++ Lambda回调

来自分类Dev

JNI C ++回调

来自分类Dev

在C回调中尝试{} catch(...){}-好主意吗?

来自分类Dev

在C回调中快速转换UnsafeMutablePointer <Void>

来自分类Dev

使用C ++ 11 lambda作为GObject库中的回调

来自分类Dev

BST的C ++中的回调函数和函数指针故障

来自分类Dev

在C ++中实现回调的最佳方法是什么

来自分类Dev

在C#中的回调内部等待安全吗?

来自分类Dev

在C#中从线程模式正确回调

来自分类Dev

回调,用于在C ++中运行外部应用程序

来自分类Dev

如何在Swift中处理C枚举回调函数

来自分类Dev

C ++无法从回调函数中的“ this”访问对象指针

来自分类Dev

在C ++中实现回调矩阵的数据结构

来自分类Dev

BST的C ++中的回调函数和函数指针故障