Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 64位系统,GINT_TO_指针(i)/GPOINTER_TO_INT(p)_C_Gtk_Glibc - Fatal编程技术网

C 64位系统,GINT_TO_指针(i)/GPOINTER_TO_INT(p)

C 64位系统,GINT_TO_指针(i)/GPOINTER_TO_INT(p),c,gtk,glibc,C,Gtk,Glibc,我最难将整数传递给回调函数,因为g\u signal\u connect的最后一个参数必须是指针。在这里,我将信号连接到回调: for (i=0;i<10;i++) { ... gtk_widget_set_events(tab_ebs[i],GDK_BUTTON_PRESS_MASK); g_signal_connect (G_OBJECT (tab_ebs[i]), "button_press_event", G_CALLBACK (tab_clicked_c

我最难将整数传递给回调函数,因为
g\u signal\u connect
的最后一个参数必须是指针。在这里,我将信号连接到回调:

for (i=0;i<10;i++)
{

    ...
    gtk_widget_set_events(tab_ebs[i],GDK_BUTTON_PRESS_MASK);
    g_signal_connect (G_OBJECT (tab_ebs[i]), "button_press_event", G_CALLBACK (tab_clicked_cb), GINT_TO_POINTER(i));

}
void tab_clicked_cb (gpointer p)
{
    printf("tab #%d clicked\n", GPOINTER_TO_INT(p));
}
我在stdout中得到的是如下语句:

tab #6578976 clicked
tab #6579264 clicked
tab #6579552 clicked
tab #6579840 clicked

当我只有十个标签的时候。在64位系统上,如何将整数传递给回调fcn?谢谢。

您的回调函数可能是错误的,大多数Gtk回调处理程序会将引发事件的小部件作为第一个参数传递给回调函数。所以它应该是,例如

void tab_clicked_cb (GtkWidget *widget, gpointer p)
{
    printf("tab #%d clicked\n", GPOINTER_TO_INT(p));
}

编辑,Gtk根本不清楚button_press_事件的回调处理程序是什么,读取为button_press_事件的回调处理程序的文档没有收到任何参数。

nos让我半途而废。事实证明,我的回调函数中也缺少事件的参数。以下是有效的表格:

void tab_clicked (GtkWidget *widget, GdkEventButton *ev, gpointer p)
{
    printf("tab #%d clicked\n", GPOINTER_TO_INT(p));
}

谢谢你的回复。我按照您所描述的方式更改了
选项卡单击\u cb
,但现在我得到的响应如下所示:tab#7334608 clicked。如果您查看
按钮按下事件
()的文档,您可以看到处理程序应该接收哪些参数。