当前位置:  开发笔记 > 编程语言 > 正文

使用ijg支持JPEG - 获取访问冲突

如何解决《使用ijg支持JPEG-获取访问冲突》经验,为你挑选了1个好方法。

我最近试图更新我的游戏以压缩格式(JPEG和PNG)存储图形.

虽然我最终选择了不同的库,但我最初的尝试是将ijg与JPEG解压缩结合起来.但是,我甚至无法使最简单的控制台应用程序工作,我想知道是否有人可能能够阐明原因.

这是我的代码,它链接到作为ijg包的一部分的jpeg.lib:

#include "stdafx.h"
#include 
#include 
#include 

int _tmain(int argc, _TCHAR* argv[])
{
    struct jpeg_decompress_struct cinfo;
    struct jpeg_error_mgr jerr;
    JSAMPARRAY buffer;
    int row_stride;

    //initialize error handling
    cinfo.err = jpeg_std_error(&jerr);

    //initialize the decompression
    jpeg_create_decompress(&cinfo);

    FILE* infile;
    errno_t err = fopen_s(&infile, "..\\Sample.jpg", "rb");
    assert(err == 0);

    //specify the input
    jpeg_stdio_src(&cinfo, infile);

    //read headers
    (void) jpeg_read_header(&cinfo, TRUE);

    return 0;
}

问题是调用jpeg_read_header()失败并出现访问冲突:

JPEGTest.exe中0x7c91b1fa(ntdll.dll)的未处理异常:0xC0000005:访问冲突写入位置0x00000010.

有没有人有任何想法我可能做错了什么?



1> Tal Pressman..:

我刚遇到同样的问题(虽然我试图对图像进行编码).显然,FILE*在DLL之间不可移植,因此您不能使用任何将FILE*作为参数的libjpeg API.

有几种解决方案,但它们都归结为必须重建库:

将库构建为静态库,并将其链接到您的应用程序.这就是我所做的,它解决了我的问题.

将源/目标处理程序移出libjpeg并进入应用程序.然后,您可以将libjpeg构建为静态库或DLL,以适合您的方式.我不确定这是否可行,但它是与源代码一起分发的"install.doc"文件中的建议解决方案.

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有