Мне нужно вывести 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.
Что я должен делать?