【发布时间】:2022-01-06 14:44:00
【问题描述】:
我正在使用 GTK3.0 和 C 创建一个 Linux GUI,并且我想对多个开关使用相同的回调。为了区分被点击的开关,我尝试在 g_signal_connect 中使用 gpointer 参数,但回调似乎没有收到正确的值。
我以这种方式创建信号:
g_signal_connect(led1_switch, "state-set", G_CALLBACK(on_gpio_btn_click), (gpointer)"LED1");
g_signal_connect(led2_switch, "state-set", G_CALLBACK(on_gpio_btn_click), (gpointer)"LED2");
并且回调试图让 gpointer 传递:
static void on_gpio_btn_click(GtkWidget *wid, gpointer ptr)
{
int gpio;
int val = 0;
char *gpio_switch = ptr;
...
但是当我调试应用程序时,ptr 指针的值为 0x1,这是一个错误的内存地址。
不应该指向存储常量字符串“LED1”的内存地址吗? 我究竟做错了什么?如何为多个小部件共享相同的回调?我有 8 个开关来控制 GPIO,我宁愿为所有这些开关设置一个回调,而不是创建八个。
【问题讨论】: