gpt4 book ai didi

c++ - libjpeg 中的错误处理

转载 作者:IT老高 更新时间:2023-10-28 22:24:43 25 4
gpt4 key购买 nike

我正在使用 C++ JPEG 库 (libjpeg),我意识到当某些函数失败时会调用 exit() 并关闭应用程序。如何覆盖此行为并防止应用程序因 libjpeg 错误而关闭?

最佳答案

这是 libjpeg 的默认行为。为了使用 libjpeg 处理错误,您必须像这样定义错误处理例程:

struct jpegErrorManager {
/* "public" fields */
struct jpeg_error_mgr pub;
/* for return to caller */
jmp_buf setjmp_buffer;
};
char jpegLastErrorMsg[JMSG_LENGTH_MAX];
void jpegErrorExit (j_common_ptr cinfo)
{
/* cinfo->err actually points to a jpegErrorManager struct */
jpegErrorManager* myerr = (jpegErrorManager*) cinfo->err;
/* note : *(cinfo->err) is now equivalent to myerr->pub */

/* output_message is a method to print an error message */
/*(* (cinfo->err->output_message) ) (cinfo);*/

/* Create the message */
( *(cinfo->err->format_message) ) (cinfo, jpegLastErrorMsg);

/* Jump to the setjmp point */
longjmp(myerr->setjmp_buffer, 1);

}

然后使用 jpeg_std_error 注册它。

FILE* fileHandler;
/* ... */
struct jpeg_decompress_struct cinfo;
jpegErrorManager jerr;
cinfo.err = jpeg_std_error(&jerr.pub);
jerr.pub.error_exit = jpegErrorExit;
/* Establish the setjmp return context for my_error_exit to use. */
if (setjmp(jerr.setjmp_buffer)) {
/* If we get here, the JPEG code has signaled an error. */
cerr << jpegLastErrorMsg << endl;
jpeg_destroy_decompress(&cinfo);
fclose(fileHandler);
return 1;
}

你可以找到一个完整的例子here .

关于c++ - libjpeg 中的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19857766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com