中国Linux公社论坛's Archiver

leeray 发表于 2008-3-15 16:57

新手求助 gponiter 参数传递问题

[color=#00ff]void[/color][color=#000] a ([/color][color=#00ff]const[/color][color=#000] unsigned [/color][color=#00ff]int[/color][color=#000] a [/color][color=#000]=[/color]
[color=#80080]1[/color][color=#000]){
   printf([/color][color=#8000]"[/color][color=#8000]a = %d[/color][color=#8000]"[/color][color=#000],a); [/color][color=#0800]//[/color][color=#0800]这里打印一个a , 是 1[/color]
[color=#000]   
   gpointer data;
   data [/color][color=#000]=[/color][color=#000] GINT_TO_POINTER(a);

   printf([/color][color=#8000]"[/color][color=#8000]data = %d[/color][color=#8000]"[/color][color=#000],GPOINTER_TO_INT(data)); [/color][color=#0800]//[/color][color=#0800]这里打印一个data , 是 1[/color]
[color=#000]
   b(data);
}

[/color][color=#00ff]void[/color][color=#000] b(gpointer data){
   [/color][color=#00ff]int[/color][color=#000] a[/color][color=#000]=[/color][color=#000] GPOINTER_TO_INT(data);
   printf([/color][color=#8000]"[/color][color=#8000]a = %d[/color][color=#8000]"[/color][color=#000],a); [/color][color=#0800]//[/color][color=#0800]这里打印一个a , 是 -5 [/color]
[color=#000]}
[/color]


  
这里是怎么回事呢?
  
怎么我把gpointer传过去, 值就变了呢?   

我的程序大概就是这个样子, 只不过传递值得时候是通过gtk的 g_signal_connect(G_OBJECT, "response", CALL_BACK_FUN, gpointer)
  
这里, CALL_BACK_FUN就是方法 b了。 gpointer 就是 上面的data了。   
  
b方法原型应该是: void b (GtkWidget *msg, gpointer data)
  
msg 就是g_signal_connect的第一个参数的对象。



然后我不用宏来解决。

[color=#00ff]void[/color][color=#000] b([/color]GtkWidget *msg, [color=#000]gpointer data){
   [/color]int *a = static_cast<int *>(data);[color=#000]
   printf([/color][color=#8000]"[/color][color=#8000]a = %d[/color][color=#8000]"[/color][color=#000],a); [/color][color=#0800]//[/color][color=#0800]这里打印一个a , 还是是 -5 [/color]
[color=#000]}

求助啊!!!!!
[/color]

页: [1]

Powered by Discuz! Archiver 6.1.0F  © 2001-2007 Comsenz Inc.