我正在尝试从Cairo图像面切换到xlib面。我的代码可以很好地处理图像曲面,但我认为我没有正确地初始化xlib曲面。它编译,但它抛出警告,什么也没有显示。
下面是初始化表面的当前代码:
int width, height;
gdk_threads_enter();
gdk_drawable_get_size(pixmap, &width, &height);
gdk_threads_leave();
/*** Create surface to draw on ***/
cairo_surface_t *cst = cairo_xlib_surface_create(gdk_x11_drawable_get_xdisplay(pixmap),
gdk_x11_drawable_get_xid(pixmap),
gdk_x11_visual_get_xvisual(gvis),
width, height);编译时收到以下警告:
In function 'do_draw':
evis.c:112:11: warning: passing argument 1 of 'cairo_xlib_surface_create' makes pointer from integer without a cast [enabled by default]
width, height);
^
In file included from evis.c:6:0:
/usr/include/cairo/cairo-xlib.h:49:1: note: expected 'struct Display *' but argument is of type 'int'
cairo_xlib_surface_create (Display *dpy,
^
evis.c:112:11: warning: passing argument 3 of 'cairo_xlib_surface_create' makes pointer from integer without a cast [enabled by default]
width, height);
^
In file included from evis.c:6:0:
/usr/include/cairo/cairo-xlib.h:49:1: note: expected 'struct Visual *' but argument is of type 'int'
cairo_xlib_surface_create (Display *dpy,
^我很确定这些警告破坏了代码,我也不知道如何修复它们。我尝试将第一个参数和第三个参数分别转换为(Display *)和(Visual *),但这也不起作用。开始抛出其他警告。
*编辑1*试图理解这一点,但我对指针的理解仅限于到目前为止不存在。gdk_drawable_get_xdisplay()返回一个Display*,但我的函数正在寻找指向struct Display *的指针。2和如何从Display*到Display *之间有什么区别。
发布于 2013-12-24 17:35:03
编译器认为函数返回int (这就是这里发生的情况,因为它抱怨这两个函数的结果)的“通常”原因是它找不到函数的原型,这意味着您缺少了一个#include。(虽然我希望在这种情况下还能找到其他警告?)
https://stackoverflow.com/questions/20763560
复制相似问题