我试图用Python的ctypes包装librsvg的基本函数,但是我得到了一个segfault。在
C:
// pycairo excerpt
typedef struct {
PyObject_HEAD
cairo_t *ctx;
PyObject *base; /* base object used to create context, or NULL */
} PycairoContext;
// librsvg excerpt
RsvgHandle * rsvg_handle_new_from_file (const gchar * file_name, GError ** error);
// ...
gboolean rsvg_handle_render_cairo (RsvgHandle * handle, cairo_t * cr);
Python类型:
^{pr2}$错误发生在此行:librsvg.rsvg_handle_render_cairo(self.handle, z.ctx)
你知道这是怎么回事吗?在
问题是没有定义返回类型的规范;仅在结果上使用
c_void_p
不足以解决这种情况下的问题。你需要把在适当的地方。然后它(也)在OSX中以32位或64位工作。在
但是我发现,在从文件创建句柄时,为了处理可能出现的错误,扩展基本包装更有用。下面是一个基本的包装。它还以基本相同的方式复制标准
^{pr2}$rsvg
绑定的基本用法。在示例用法见https://stackoverflow.com/a/14928770/1832154。在
在librsvg.rsvg_handle_render_cairo应为指针,而正在获取整数。不确定整个故事,但这个修改至少没有错。在
试试这个
注意,我将这两个参数包装在c_void_p中,使它们成为void*指针。不太理想,但似乎有效。在
相关问题 更多 >
编程相关推荐