Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
kaznachei67
27 / 27 / 10
Регистрация: 17.03.2014
Сообщений: 102
#1

Ошибка построения проекта без информации об ошибках - C++

03.09.2015, 19:15. Просмотров 340. Ответов 10
Метки нет (Все метки)

Доброго времени суток!
Проблема такая: нужно было программно реализовать распаковку xlsx-файлов в xml. Я скачал библиотеку для распаковки zlib и работал с ней. Честно признаюсь, я далек от этого и порою действовал скорее по наитию, нежели понимая, что делаю. В случае нахождения в моих действиях полного идиотизма, прошу не закидывать меня тапочками
Ориентируясь по примерам, я накидал шаблонную программу, которая компилируется, но построить решение не дает. Среда разработки: MS Visual Studio 2010.
Вот исходник:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include "zconf.h"
#include "zlib.h"
#include <iostream>
 
#pragma comment(lib, "zdll.lib")
 
using std::cout;
using std::endl;
 
#include <stdio.h>
#include <string.h>
#include <assert.h>
 
#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__)
#  include <fcntl.h>
#  include <io.h>
#  define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY)
#else
#  define SET_BINARY_MODE(file)
#endif
 
#define CHUNK 16384
 
int inf(FILE *source, FILE *dest)
{
    int ret;
    unsigned have;
    z_stream strm;
    unsigned char in[CHUNK];
    unsigned char out[CHUNK];
        /* allocate inflate state */
    strm.zalloc = Z_NULL;
    strm.zfree = Z_NULL;
    strm.opaque = Z_NULL;
    strm.avail_in = 0;
    strm.next_in = Z_NULL;
    ret = inflateInit(&strm);
    if (ret != Z_OK)
        return ret;
    /* decompress until deflate stream ends or end of file */
    do {
        strm.avail_in = fread(in, 1, CHUNK, source);
        if (ferror(source)) {
            (void)inflateEnd(&strm);
            return Z_ERRNO;
        }
        if (strm.avail_in == 0)
            break;
        strm.next_in = in;
        /* run inflate() on input until output buffer not full */
        do {
            strm.avail_out = CHUNK;
            strm.next_out = out;
            ret = inflate(&strm, Z_NO_FLUSH);
            assert(ret != Z_STREAM_ERROR);  /* state not clobbered */
            switch (ret) {
            case Z_NEED_DICT:
                ret = Z_DATA_ERROR;     /* and fall through */
            case Z_DATA_ERROR:
            case Z_MEM_ERROR:
                (void)inflateEnd(&strm);
                return ret;
            }
            have = CHUNK - strm.avail_out;
            if (fwrite(out, 1, have, dest) != have || ferror(dest)) {
                (void)inflateEnd(&strm);
                return Z_ERRNO;
            }
        } while (strm.avail_out == 0);
    } while (ret != Z_STREAM_END);
    /* clean up and return */
    (void)inflateEnd(&strm);
    return ret == Z_STREAM_END ? Z_OK : Z_DATA_ERROR;
}
 
int main()
{
    cout << "Testing." << endl;
    FILE *source, *dest;
    source = fopen("Book1.xlsx", "r");
    dest = fopen("1.xml", "w");
    cout << inf(source, dest);
    fclose(source);
    fclose(dest);
    system("pause");
    return 0;
}

При компиляции выводит на экран код ошибки Z_DATA_ERROR.
Выходные данные отладки:
Кликните здесь для просмотра всего текста

"xmlParser.exe": Загружено: "C:\Users\Admin\Documents\Visual Studio 2010\Projects\xmlParser\Debug\xmlParser.exe", Символы загружены.
"xmlParser.exe": Загружено: "C:\Windows\SysWOW64\ntdll.dll", Невозможно найти или открыть файл PDB
"xmlParser.exe": Загружено: "C:\Windows\SysWOW64\kernel32.dll", Невозможно найти или открыть файл PDB
"xmlParser.exe": Загружено: "C:\Windows\SysWOW64\KernelBase.dll", Невозможно найти или открыть файл PDB
"xmlParser.exe": Загружено: "C:\Windows\SysWOW64\msvcp100d.dll", Символы загружены.
"xmlParser.exe": Загружено: "C:\Windows\SysWOW64\msvcr100d.dll", Символы загружены.
"xmlParser.exe": Загружено: "C:\Windows\SysWOW64\zlib1.dll", Двоичный код не был построен с отладочной информацией.
"xmlParser.exe": Загружено: "C:\Windows\SysWOW64\msvcrt.dll", Невозможно найти или открыть файл PDB
"xmlParser.exe": Загружено: "C:\Windows\SysWOW64\apphelp.dll", Невозможно найти или открыть файл PDB
"xmlParser.exe": Загружено: "ImageAtBase0x4a3f0000", Загрузка отключена параметром включения/исключения.
"xmlParser.exe": Выгружено: "ImageAtBase0x4a3f0000"
Программа "[73276] xmlParser.exe: Машинный код" завершилась с кодом 0 (0x0).

При построении сообщает, что ошибок: 0, успешно: 0. Раньше при запуске ругался о невозможности выполнения приложения из-за отсутствия библиотеки zlib1.dll, но после добавления ее в Windows\SysWOW64 стал ворчать, что ее двоичный код не был построен с отладочной информацией.
В чем может быть проблема и каковы пути решения?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.09.2015, 19:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка построения проекта без информации об ошибках (C++):

Ошибка построения проекта - Набор инструментов является неизвестным или отсутствует - C++
Добрый день начал осваивать С++ недавно поэтому столкнулся с небольшой проблемой, не могу построить проект выдает ошибку, Построение...

При запуске скомпилированного проекта Visual Studio 2010 возникает ошибка: В ходе построения произошли ошибки - C++
Последние 7 листингов из книги не работают. Не могут они все быть с ошибками. Скорее всего что-то произошло с этой грёбаной Студией. Все...

Сборка проекта без IDE - C++
Захотелось узнать не много больше, чем просто писать приложения с использованием IDE, что же там скрывается под этими средами, когда то так...

Ошибка на этапе построения проекта - C (СИ)
Здравствуйте! Может кто-то сталкивался. Когда пытаюсь отстроить проект (Build-Build solution), отстроения не происходит, а пишет: ...

VS 2012 Настройка получения информации об ошибках с сервера - Visual Studio
Всем привет. Прошу помочь с решением одной странной проблемы. Я работаю с не очень большим проектом, который включает в себя...

Как сохранить bmp без сообщений об ошибках? - Delphi
try fScreenCopy.SaveToFile(Owner.PathToDebugFiles + '\' + FName + '.bmp'); finally end; пытаюсь сохранять бмп, но...

10
castaway
Эксперт С++
4920 / 3028 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
03.09.2015, 19:21 #2
Цитата Сообщение от kaznachei67 Посмотреть сообщение
При компиляции выводит на экран код ошибки Z_DATA_ERROR.
Покажи скриншот того как выводит.
0
kaznachei67
27 / 27 / 10
Регистрация: 17.03.2014
Сообщений: 102
03.09.2015, 20:49  [ТС] #3
Кстати построилось, но результаты остались те же.
При запуске из среды особо нечего скринить, просто -3 выводит. Полазил по мануалам zlib, там макрос #define Z_DATA_ERROR (-3) - в исходнике есть пример. Инфа из загололовочного файла: inflate() returns Z_DATA_ERROR if the input data was corrupted (input stream not conforming to the zlib format or incorrect check value). То есть входной поток не соответствует формату zlib.
Зато при запуске экзешника выдает такую ошибку:
Буду копаться дальше.
0
Миниатюры
Ошибка построения проекта без информации об ошибках  
castaway
Эксперт С++
4920 / 3028 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
03.09.2015, 20:54 #4
Убедись что функции fopen возвращают не ошибку.
1
kaznachei67
27 / 27 / 10
Регистрация: 17.03.2014
Сообщений: 102
03.09.2015, 20:58  [ТС] #5
Тьфу, дурная голова, забыл файл для открытия к исполняемому файлу приложить.
Теперь просто -3. Наверное, я что-то не так передаю в функцию.
0
castaway
Эксперт С++
4920 / 3028 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
03.09.2015, 21:01 #6
Если меняешь код, показывай изменённый.
Ты добавил проверку на ошибки для fopen?
0
kaznachei67
27 / 27 / 10
Регистрация: 17.03.2014
Сообщений: 102
03.09.2015, 21:11  [ТС] #7
Да, добавил. Но ошибка пропала сразу после добавления xlsx-файла в Debug
C++
1
2
3
4
5
6
7
8
9
10
FILE *source = NULL, *dest;
source = fopen("Book1.xlsx", "r");
if (source == NULL) cout << "Ошибка открытия файла!" << endl;
else 
{
    dest = fopen("1.xml", "w");
    cout << inf(source, dest);
    fclose(dest);
}
fclose(source);
0
castaway
Эксперт С++
4920 / 3028 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
03.09.2015, 21:14 #8
-3 печатает cout в 7-й строке?
0
kaznachei67
27 / 27 / 10
Регистрация: 17.03.2014
Сообщений: 102
03.09.2015, 21:18  [ТС] #9
Да. В первом посте есть описание функции
0
castaway
Эксперт С++
4920 / 3028 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
03.09.2015, 22:17 #10
Теперь стоит выяснить какая именно функция возвращает эту ошибку, а затем отталкиваться от описания её ошибок.
0
kaznachei67
27 / 27 / 10
Регистрация: 17.03.2014
Сообщений: 102
04.09.2015, 22:01  [ТС] #11
Видимо, я изначально неверно понял назначение метода inflate().
За полтора дня копаний я наконец дошел до мысли, что zlib не работает непосредственно с архивами, ее методы позволяют осуществлять сжатие (метод inflate()) и декомпрессию (метод defflate()) файлов. В то время как я ошибочно отправлял в inflate() сам xlsx-файл. Формат xlsx по сути представляет собой zip-архив. По идее, такой архив содержит в себе не только сжатые файлы, но и заголовок, описывающий особенности архива и перечень содержащихся в нем файлов. Получается, мне нужно обработать заголовок, получить из него имена необходимых файлов и скормить эти файлы функции inflate(). Верно я понимаю?
P.S.: если быть точным, не конкретно функции inflate(). Шаблонный пример, который приведен в мануале, а также мной в первом посте, описывает функцию inf(), в которая основывается на inflate(), принимает сжатый файл, и выдает распакованный.
0
04.09.2015, 22:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.09.2015, 22:01
Привет! Вот еще темы с ответами:

Целесообразность и эффективность структуры построения проекта - C# MVC
Добрый день. Решил использовать MVC 3 для проекта. Но воспользоваться Entity Framework не получится. Возник вопрос по поводу такого...

При построении происходит ошибка, но не выводится информация об ошибках - C#
Подскажите, как найти ошибку, если студия не показывает, где ошибки.

Ошибка при открытии проекта, созданного в XNA 2.0 (Не удается прочесть файл проекта) - XNA
Доброе время суток:) Скачал тут одно решение на XNA, хочу его открыть в VS2010+XNA4.0. Пишет что надо его преобразовать. После...

Вывод копилятором предопределенных пользователем сообщений в ходе построения проекта. MSVC 2010 - Visual C++
Добрый день Есть проект параметры сборки которого я регулирую паретрами-макроопределениями. После (или перед) сборки проекта...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru