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

用回调扫描C++绑定

  •  8
  • whatnick  · 技术社区  · 14 年前

    我正在为一些C++代码写一些函数/ Python绑定。这就是所谓的Kinect意外API,我有马达和led功能 working . 对解析和填充RGB和深度缓冲区的侦听器类的回调似乎不是从SWIG调用的。数据捕获线程显然启动并开始占用CPU,但是没有来自回调的调试行通过。填充数据缓冲区并从python轻松访问它们的更好方法是什么?

    class KinectListener
    {
         public:
            virtual ~KinectListener(){};
            virtual void KinectDisconnected(Kinect *K) {};
            virtual void DepthReceived(Kinect *K) {};
            virtual void ColorReceived(Kinect *K) {};
            virtual void AudioReceived(Kinect *K) {};
    };
    

    这里是带有虚拟方法的侦听器类,这个类的Python包装版本可以用来继承c++类的侦听器吗?我在C++中添加了一个最小的侦听器,现在剩下的工作是用Type MeMax高效地访问数组。目前我正在使用这个天真的类型映射

    %typemap(out) unsigned short [ANY] {
      int i;
      $result = PyList_New($1_dim0);
      for (i = 0; i < $1_dim0; i++) {
        PyObject *o = PyInt_FromLong((long)$1[i]);
        PyList_SetItem($result,i,o);
      }
    }
    

    更好的选择?

    2 回复  |  直到 14 年前
        1
  •  3
  •   N0vember    14 年前

    有一种使用控制器功能的方法。 为KinectListener代理启用它,一行代码:

    %feature("director") KinectListener
    

    然后您可以从python代码中的KinectListener类继承并定义您的函数。

        2
  •  3
  •   Andy Thomas    14 年前

    巧合的是,我正在调查SWIG的回调。

    这个 SWIG 2.0 documentation says this :

    SWIG完全支持函数指针,前提是回调函数是用C语言定义的,而不是用目标语言定义的。... 但是,现有的C函数可以用作参数,只要将它们作为常量安装即可。一种方法是像这样使用%常量指令。。。

    我计划用手写的JNI编写一个C回调函数来调用Java。如果有别的办法的话,我也想听听。