如何在 png_set_mem_fn 之后访问 mem_ptr
How to access mem_ptr after png_set_mem_fn
我有以下回调:
struct my_struct{
void*(my_alloc)(size_t);
void (my_free)(void*);
};
void *alloc_fn(png_structp png, png_size_t size){
my_struct *ptr = static_cast<my_struct*>(/* what here? */);
return ptr->my_alloc(size);
}
void free_fn(png_structp png, void *mem){
my_struct *ptr = static_cast<my_struct*>(/* again, madness! */);
ptr->my_free(mem);
}
我会这样使用:
int main(){
png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, nullptr, nullptr, nullptr);
my_struct mem_fn{std::malloc, std::free};
png_set_mem_fn(png_ptr, &mem_fun, alloc_fn, free_fn);
// use png_ptr to load png
}
png_set_mem_fn
有如下原型:
void png_set_mem_fn(png_structp png_ptr, png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn);
但我不知道如何在 alloc_fn
或 free_fn
中检索 mem_ptr
。
我已阅读有关 png_get_progressive_ptr
and png_get_user_chunk_ptr
的文章,这是我在任何文档中看到的唯一看起来合适的函数。但是 png_get_progressive_ptr
returns 回调和 png_get_user_chunk_ptr
与 文件 .
中的用户数据相关
我到底错过了什么?我应该如何检索 mem_fun
?
您需要使用 png_get_mem_ptr
。这记录在 http://www.libpng.org/pub/png/libpng-manual.txt.
中
我有以下回调:
struct my_struct{
void*(my_alloc)(size_t);
void (my_free)(void*);
};
void *alloc_fn(png_structp png, png_size_t size){
my_struct *ptr = static_cast<my_struct*>(/* what here? */);
return ptr->my_alloc(size);
}
void free_fn(png_structp png, void *mem){
my_struct *ptr = static_cast<my_struct*>(/* again, madness! */);
ptr->my_free(mem);
}
我会这样使用:
int main(){
png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, nullptr, nullptr, nullptr);
my_struct mem_fn{std::malloc, std::free};
png_set_mem_fn(png_ptr, &mem_fun, alloc_fn, free_fn);
// use png_ptr to load png
}
png_set_mem_fn
有如下原型:
void png_set_mem_fn(png_structp png_ptr, png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn);
但我不知道如何在 alloc_fn
或 free_fn
中检索 mem_ptr
。
我已阅读有关 png_get_progressive_ptr
and png_get_user_chunk_ptr
的文章,这是我在任何文档中看到的唯一看起来合适的函数。但是 png_get_progressive_ptr
returns 回调和 png_get_user_chunk_ptr
与 文件 .
我到底错过了什么?我应该如何检索 mem_fun
?
您需要使用 png_get_mem_ptr
。这记录在 http://www.libpng.org/pub/png/libpng-manual.txt.