通过 SWIG 包装 C 回调

发布于 2024-10-11 15:07:14 字数 714 浏览 4 评论 0原文

我正在尝试使用 SWIG 将一些 Gstreamer 功能包装到 PHP 中,但我不知道如何处理 C 回调。我可以从 C 调用 PHP 函数吗?您将如何处理如下回调?

#include <gst/gst.h>

// ...

static gboolean my_callback(GstBus *bus, GstMessage *message, gpointer user_data) {
  g_print("Got %s message\n", GST_MESSAGE_TYPE_NAME(message));

  switch(GST_MESSAGE_TYPE(message)) {
    // ...
  }

  return TRUE;
}

main(gint argc, gchar *argv[])
{
  GstElement *pipeline;
  GstBus *bus;

  gst_init (&argc, &argv);

  pipeline = gst_pipeline_new ("my_pipeline");

  /* add handler */
  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline)); 
  gst_bus_add_watch (bus, my_bus_callback, NULL); // ------------<
  gst_object_unref (bus);

  // ...
}

I'm trying to wrap some Gstreamer functionlity into PHP using SWIG, but i can't figure out how to handle C callbacks. Can I call a PHP function from C? How will you handle a callback like the following?

#include <gst/gst.h>

// ...

static gboolean my_callback(GstBus *bus, GstMessage *message, gpointer user_data) {
  g_print("Got %s message\n", GST_MESSAGE_TYPE_NAME(message));

  switch(GST_MESSAGE_TYPE(message)) {
    // ...
  }

  return TRUE;
}

main(gint argc, gchar *argv[])
{
  GstElement *pipeline;
  GstBus *bus;

  gst_init (&argc, &argv);

  pipeline = gst_pipeline_new ("my_pipeline");

  /* add handler */
  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline)); 
  gst_bus_add_watch (bus, my_bus_callback, NULL); // ------------<
  gst_object_unref (bus);

  // ...
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一身软味 2024-10-18 15:07:14

如果您下载最新的 swig 源代码 (2.0.1),这里有一个使用 PHP 回调的示例。它位于 swig-2.0.1/Examples/php/callback 目录中。

If you download the latest swig source (2.0.1) there is an example of using callbacks with PHP. It's in the swig-2.0.1/Examples/php/callback directory.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文