代码之家  ›  专栏  ›  技术社区  ›  MBZ

C++多回调函数

  •  0
  • MBZ  · 技术社区  · 14 年前

    我有一个dll,它要求我为它设置一个回调函数(实际上它是一个camerasdk,当它收到一张图片时,它会回调我的函数)。 因为我应该做未知数量的回调函数。

    简单的方法是创建一个类(camera),它有一个回调函数。 但是我不能将类成员的指针传递给dll(它只接受(void)(image*))

    3 回复  |  直到 11 年前
        1
  •  0
  •   Alex F    14 年前

    摄像头SDK是否支持多摄像头连接?如果没有,你需要和SDK提供商谈谈。

    void Callback0(image*);
    void Callback1(image*);
    
    SubscribeImageCallback(0, Callback0);  // camera 0
    SubscribeImageCallback(1, Callback1);  // camera 1
    

    问题的实际答案取决于camerasdk接口。

        2
  •  1
  •   Michael Anderson    14 年前

    尝试创建一个包含所有要调用的函数对象的全局列表,然后添加一个用所需数据调用每个回调的函数。像这样:

    std::vector<ICallback*> g_callbacks;
    
    void callback_wrapper( image * image )
    {
      for(unsigned int i=0; i<g_callbacks.size(); ++i)
      {
         g_callbacks[i]->process( image );
      }
    }
    

    然后将SDK使用的回调设置为回调包装函数。

        3
  •  0
  •   Pete Kirkham    14 年前

    根据操作系统的不同,您可以为每个回调对象创建动态函数。对于那些没有任何工具将值传递给回调的遗留代码的回调,我已经做到了这一点。

    创建一个具有库所需类型的小型原型转发函数,然后用一个容易看到的额外参数调用真正的回调函数

    void Call01020304 () {
        CallWithValue(0x01020304);
    }
    

    然后使用virtualloc+PAGE\u EXECUTE\u READWRITE或mmap+PROT\u EXEC分配一些可以执行的内存。分配通常以4K块为单位,因此创建一个类来管理函数,因为您将一次分配足够多的函数。