Мне нужно вывести 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
, но должнабыть типа cairo_write_func_t
.
С clang я получаю эту ошибку:
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.
Что мне делать?