为什么我在回调中无法正确识别?
我想也许是因为在add_strip()"i"被销毁之后,我怎么能把int传递给那个回调呢?谢谢.
29 void add_strip(int i,char name[30]){
30 sl[i] = elm_slider_add(win);
31 elm_slider_label_set(sl[i], name);
32 elm_slider_unit_format_set(sl[i], "dB");
33 elm_slider_span_size_set(sl[i], 60);
34 evas_object_size_hint_align_set(sl[i], 0.5, EVAS_HINT_FILL);
35 evas_object_size_hint_weight_set(sl[i], 0.0, EVAS_HINT_EXPAND);
36 elm_slider_indicator_format_set(sl[i], "%3.0f");
37 elm_slider_min_max_set(sl[i], 0, 2);
38 elm_slider_inverted_set(sl[i], 1);
39 elm_slider_value_set(sl[i], 0);
40 elm_object_scale_set(sl[i], 1.0);
41 elm_slider_horizontal_set(sl[i], 0);
42 elm_box_pack_end(bx, sl[i]);
43 evas_object_show(sl[i]);
44 evas_object_smart_callback_add(sl[i], "changed", vol_changed, &i); // <--------------
45 }
Run Code Online (Sandbox Code Playgroud)
回调是:
13 static void
14 vol_changed(void *data, Evas_Object *obj, void *event_info)
15 {
16 int n = *((int*)data);
17 printf("%d\n", &n); // <------------------------------------- this prints always -1078364196 (seems an address)
18
19 if(lo_send(dest, "/fader/0", "f", elm_slider_value_get(sl[0]))==-1)
20 printf("OSC error %d: %s\n", lo_address_errno(dest), lo_address_errstr(d est));
21 }
Run Code Online (Sandbox Code Playgroud)
您将局部变量的地址作为参数传递给回调.因此,当函数退出时,变量被释放.它的地址现在无效.当调用回调时,局部变量的地址很可能被其他东西使用,这解释了奇怪的(和不同的)值.
此外,正如其他帖子中所述,您错误地键入了您的剪辑.