- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我试图找到一个类似的问题,但找不到任何解决方案。
我有一个使用 GTK3 用 C 语言编写的软件,我正在尝试为在我的 GUI 上按下按钮设置一个回调。该代码应该传递一个整数作为参数,让我的回调函数知道要引用哪个 GUI 窗口。
void main_gui()
{
int number = 5;
g_signal_connect(button,
"clicked",
G_CALLBACK(callback_func),
(gpointer*) &num);
}
void callback_func(gpointer *data)
{
int number;
number = (int*)data;
printf("Number: %d\n", number);
}
问题是每当我尝试将数字转换为整数并检查数字(通过 print 语句)时,它都会返回不正确的数字。
最佳答案
首先,该函数实际上采用 gpointer*
还是仅采用 gpointer
?后者似乎更有可能,因为 gpointer
是一个 void *
。
其次,您传递的是局部变量 &number
的地址,而不是它的值。不要那样做。局部变量在堆栈上,一旦您的函数退出(这发生在您的回调被调用之前),它可能不存在。只需将转换为所需类型的值传递:(gpointer)number
然后当您要使用它时,将其转换回:(int)data
这是更新后的代码:
void main_gui()
{
int number = 5;
g_signal_connect(button,
"clicked",
G_CALLBACK(callback_func),
//(gpointer*) &num);
(gpointer)number);
}
//void callback_func(gpointer *data)
void callback_func(gpointer data)
{
int number;
//number = (int*)data;
number = (int)data;
printf("Number: %d\n", number);
}
关于c - 在 g_signal_connect 中将整数作为 gpointer 传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55749456/
我遇到以下问题。当我在 g_signal_connect 中以 gpointer 的形式传递定义为 char id_rest[25]; 的 char 参数时> 以这种方式运行: g_signal_
我正在尝试通过编写一些函数来帮助我使用 Gtk 来让自己的生活更轻松(而且我很害怕做一顿饭)。感觉就像我很接近,但没有雪茄。 我已经定义了几个结构: typedef struct action_par
您好,这个问题与 GLib、gpointer 相关。 我创建了一个 gpointer 类型的值。 gpointer keys; 我调用了一个函数 insert_data(gpoi
我正在尝试学习在 C 中使用 void 指针。这是我使用 GLib 编写的代码: #include #include int main (void) { GList *l = NULL;
我试图找到一个类似的问题,但找不到任何解决方案。 我有一个使用 GTK3 用 C 语言编写的软件,我正在尝试为在我的 GUI 上按下按钮设置一个回调。该代码应该传递一个整数作为参数,让我的回调函数知道
// gcc 1.c -o 0 $(pkg-config --cflags --libs gtk+-2.0) #include #include struct tst { GtkWidge
C代码 #include //... GHashTable *hash = g_hash_table_new(NULL, NULL); GString val; g_hash_table_inser
我正在学习 Python 和 Gtk 3,使用 GObject 自省(introspection)。我已经做了一些样本,并且开始了解它是如何工作的。但是有一件事我不明白,我如何传递 gpointer
我是一名优秀的程序员,十分优秀!