如何在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
和png_get_user_chunk_ptr
,这是我在任何文档中看到的唯一合适的函数。但是png_get_progressive_ptr
返回回调,而png_get_user_chunk_ptr
与文件中的用户数据相关。
我到底错过了什么?我应该如何检索mem_fun
?
您需要使用png_get_mem_ptr
。这在http://www.libpng.org/pub/png/libpng-manual.txt中有记录。
相关文章:
- 在"template"和函数声明之间使用:template<typename trait> using tr = base_trait<trait> void fn(tr::t
- "double* grade"、"double *grade"和"double* fn()"有什么区别?
- 通过实用程序 fn 将捕获的 lambda 传递给 C 样式回调 - 错误
- v8 源代码中 ArrayMap 函数的回调 fn 参数是什么?
- (C++)如何在不导致 mem 泄漏的情况下将指针传递到分配了'new'的函数?
- 如何释放子阵列的mem,它是更大数组的一部分
- 为什么移动语义与动态 mem 分配中的浅拷贝具有相同的行为
- 标准库中是否有相当于 Rust 的 'std::mem::d rop' 的C++?
- 使用 new 而不是 malloc 分配 mem
- fn 指针的向量没有显示正确的大小()
- 为什么未初始化的指针会导致接近 0 的 mem 访问冲突
- .Net字符串是否可以在不复制的情况下交给fn(const char16_t*str)
- 新 X 在作为参数传递给函数时是否会导致 mem 泄漏
- 引用变量如何存储在mem中
- C++:将mem乐趣用于自己的结构
- 在CUDA中具有共享MEM的非方面矩阵转置
- 修改filter_iterator谓词以接受BOOST中的两个参数(二进制fn)
- 变分递归模板mem有趣的专业化
- 如何创建像"Fn"+Key_Up这样的QKeySequence
- 从 ZedBoard 上的 GNU Radio 访问 /dev/mem