Компиляция файла pyd в Windows, но эту программу нельзя запустить в режиме DOS.

Я компилировал файл C с помощью gcc в Windows и успешно получил файл pyd. К моему удивлению, он показывает «Эту программу нельзя запустить в режиме DOS» в шестнадцатеричном формате. Хотя я все еще могу вызвать функцию из него, программа вскоре вылетела из-за jpeg_read_header () из библиотеки libjpeg.

У меня вопрос: что, черт возьми, привело к сбою моей программы?

Вот мои догадки:

  1. 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);
    
    ......
    
    }
    
  2. Файл Pyd: его нельзя запустить в режиме DOS?


person Leo    schedule 24.12.2013    source источник
comment
Где именно он разбился?   -  person nobody    schedule 26.12.2013


Ответы (1)


Файл Python .pyd - это просто DLL, то есть просто файл Windows PE. Файлы Windows PE по соглашению начинаются с заглушки, которая выводит это сообщение, если вы запускаете их в DOS:

https://en.wikipedia.org/wiki/Portable_Executable#History

Практически все файлы EXE и DLL Windows содержат этот заголовок; это не подразумевает ничего особенного.

person nobody    schedule 26.12.2013
comment
Спасибо за вашу помощь. При регистрации я обнаружил, что функция в jpeg_read_header () вылетела из строя, что казалось типичной проблемой совместимости дескриптора в Windows. Вы знаете, как это исправить? - person Leo; 28.12.2013