C 正在windows上编译pyd文件,但“此程序无法在DOS模式下运行。”

C 正在windows上编译pyd文件,但“此程序无法在DOS模式下运行。”,c,windows,gcc,libjpeg,pyd,C,Windows,Gcc,Libjpeg,Pyd,我在Windows上用gcc编译了一个C文件,并成功地获得了pyd文件。令我惊讶的是,它显示这个程序不能在十六进制的DOS模式下运行。虽然我仍然可以从中调用该函数,但由于libjpeg库中的jpeg_read_头,程序很快崩溃 我的问题是到底是什么让我的程序崩溃了 以下是我的猜测: jpeg_read_header:我尝试了jpeg_mem_src和jpeg_stdio_src,但还是崩溃了 int _read_dct_coefficients(FILE* input_file, int** a

我在Windows上用gcc编译了一个C文件,并成功地获得了pyd文件。令我惊讶的是,它显示这个程序不能在十六进制的DOS模式下运行。虽然我仍然可以从中调用该函数,但由于libjpeg库中的jpeg_read_头,程序很快崩溃

我的问题是到底是什么让我的程序崩溃了

以下是我的猜测:

jpeg_read_header:我尝试了jpeg_mem_src和jpeg_stdio_src,但还是崩溃了

int _read_dct_coefficients(FILE* input_file, int** all_dcts)
{   
JDIMENSION i, compnum, rownum, blocknum;
JBLOCKARRAY row_ptrs[MAX_COMPONENTS];
size_t block_row_size;
int num_blocks = 0, cnt = 0;

#ifdef LOG_DEBUG
log_debug(__LINE__, "enter _read_dct_coefficients");
#endif

/* init decompression */
srcinfo.err = jpeg_std_error(&jsrcerr);
jpeg_create_decompress(&srcinfo);

/* init compression */
dstinfo.err = jpeg_std_error(&jdsterr);
jpeg_create_compress(&dstinfo);

jsrcerr.trace_level = jdsterr.trace_level;
srcinfo.mem->max_memory_to_use = dstinfo.mem->max_memory_to_use;

#ifdef LOG_DEBUG
log_debug(__LINE__, "%%%%%%%MY TEST # 1%%%%%%%%");
#endif  

//***************************************************************

unsigned int get_file_size(FILE *fp)  
{  
    unsigned long filesize = -1;  
    if(fp == NULL)
        return filesize;
    fseek(fp, 0L, SEEK_END);
    filesize = ftell(fp);
    fclose(fp);
    return filesize;
}

int size = get_file_size(input_file);
#ifdef LOG_DEBUG
log_debug(__LINE__, "file size = %d", size);
#endif
char *tmp_buf = (unsigned char *)malloc(sizeof(char) * size);
if (size != fread(tmp_buf, 1, size, input_file))
    log_debug(__LINE__, "cannot open.");

jpeg_mem_src(&srcinfo, tmp_buf, size);
/*
jpeg_stdio_src(&srcinfo, input_file);
*/
#ifdef LOG_DEBUG
log_debug(__LINE__, "%%%%%%%MY TEST # 2%%%%%%%%");
#endif  
jpeg_read_header(&srcinfo, TRUE);

......

}
Pyd文件:它不能在DOS模式下运行吗

Python.pyd文件只是一个DLL,它只是一个Windows PE文件。Windows PE文件按惯例以存根开始,如果您在DOS中运行这些文件,存根将打印该消息:


几乎每个Windows EXE和DLL文件都包含此头文件;这并不意味着有什么特别之处。

它到底在哪里坠毁的?谢谢你的帮助。通过日志记录,我发现函数在jpeg_read_头中崩溃,这似乎是Windows中句柄兼容性的一个典型问题。你知道怎么修吗?