我需要将 PDF 输出到文件描述符,我正在考虑使用 Cairo 和cairo_pdf_surface_create_for_stream()
:
我有一个写函数,它有这个签名:
static cairo_status_t cairowrite(void *fp, unsigned char const *data, unsigned int length);
它返回CAIRO_STATUS_SUCCESS
。
现在,我如何将此函数作为回调传递?
我试过这个:
cairo_write_func_t (*wfunc)(void *, unsigned char const *, unsigned int);
wfunc = (cairo_write_func_t)&cairowrite;
surface = cairo_pdf_surface_create_for_stream((cairo_write_func_t)wfunc, fp, (double)realwidth, (double)realwidth);
但是我收到了编译器警告:warning: assignment from incompatible pointer type
在我做的那一行wfunc = &cairowrite;
。
我究竟做错了什么?
回调函数给出了这个 gcc 错误:cairo_status_t
但必须是 type cairo_write_func_t
。
使用铿锵声我得到这个错误:
qrencode.c:250:11: warning: incompatible pointer types assigning to 'cairo_write_func_t (*)(void *, unsigned char const *, unsigned int)' from
'cairo_write_func_t' (aka 'cairo_status_t (*)(void *, unsigned char const *, unsigned int)')
wfunc = (cairo_write_func_t)&cairowrite;
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
我该怎么办?