나는 파일 설명 출력에 PDF를해야하고, 나는 카이로와 cairo_pdf_surface_create_for_stream()
를 사용하는 생각을했다 :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);
하지만 컴파일러 경고를 받고 있어요 : 내가 wfunc = &cairowrite;
를 수행 라인에 warning: assignment from incompatible pointer type
내가 뭘 잘못하고 있니?
콜백 함수는이 gcc 오류 : cairo_status_t
을 제공하지만 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.
어떻게해야합니까 : 그 소리와
나는이 오류가?
Erm, 예를 들어, C++에서 함수 포인터를 일반적으로 사용하는 방법을 간단히 설명합니다. 그건 제 질문이 아니 었습니다. 함수가 동시에 두 가지 유형을 가질 수있는 방법을 알아야합니다. 그리고 libcairo 관련 예제도 좋을 것입니다. – polemon
방금 제안을 확인했지만 작동하지 않습니다. – polemon
예, 당신 말이 맞아요. 나는 처음에'cairo_write_func_t' 유형에주의를 잃었고 위의 예제를 제공했습니다. 그런 다음 부적절하다는 것을 깨달았습니다. 그러나 나는 함수 포인터의 "확장 된"정의가 효과가있을 것이라고 생각했다. 미안해. –