Проблемы при создании случайного проекта в Visual Studio - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь собрать этот проект , который в основном является экстрактором для определенных c файлов .rom. Как человек с почти нулевым опытом в кодировании, у меня одна проблема за другой, пытаясь создать его.

В описании проекта говорится, что для его создания требуется zlibstat.lib из zlib, поэтому я получил последнюю версию zlib, открыл его на VS2019, следовал этим инструкциям и собрал все, включил требуемый zlibstat.lib.

После открытия sln проекта и выяснения, куда поместить файлы, связанные с zlib, я пытался собрать, но это дало мне эту ошибку в fs.obj: «LNK2019: неразрешенный внешний символ _uncompress, на который ссылается функция» int __cdecl run_extract (char *) "(? run_extract @@ YAHPAD@Z)". Вот как далеко меня привели Google и две мои клетки мозга.

Я не совсем уверен, что мне делать, чтобы решить эту проблему, но, очевидно, это как-то связано с функцией run_extract:

fs.h

#pragma once
#include <iostream>
#include <fstream>

#include "defs.h"

#include <zlib.h>
#pragma comment(lib, "zlibstat.lib")

#include <shlwapi.h>
#pragma comment(lib,"shlwapi.lib")

int run_extract(char *);

и фс. cpp

int run_extract(char *path)
{
    std::fstream test;
    test.open(path, std::ios::in | std::ios::binary);
    if (!test) return -1;

    size_t file_size;
    test.seekg(0, std::ios::end);
    file_size = test.tellg();
    test.seekg(0, std::ios::beg);

    unsigned char *buffer = new unsigned char [file_size];
    test.read((char*)buffer, file_size);
    test.close();

    jrm_rom_header *ptrHeader = (jrm_rom_header*)buffer;

    unsigned long indexLen = ptrHeader->count_index * sizeof(jrm_rom_file_index);
    unsigned char *index = new unsigned char [indexLen];

    uncompress(index, &indexLen, (const Bytef*)(buffer + ptrHeader->pos_index), ptrHeader->size_index); // use zlib

    jrm_rom_file_index *ptrIndex = (jrm_rom_file_index*)index;
    unsigned char key = 0;
    char *path_out = new char[0x100];
    unsigned long ypos = 0, x = 0;

    for (x = 0; x<ptrHeader->count_index; x++)
    {
        key = (ptrIndex->key & 0xff) ^ (ptrIndex->key >> 8 & 0xff) ^ (ptrIndex->key >> 16 & 0xff) ^ (ptrIndex->key >> 24 & 0xff);
        get_file_path(path_out, ptrIndex->file_path);
        // printf("%04d: file_name = %s\n      file_start = 0x%08x, file_size = 0x%08x, key = 0x%02x\n", x, path_out, ptrIndex->pos_start, ptrIndex->size_file, key);
        printf("%s: %d bytes.\n", path_out, ptrIndex->size_file);

        for (ypos = 0; ypos < ptrIndex->pos_delta; ypos++)
            buffer[ypos + ptrIndex->pos_start] ^= key;

        try_create_directory(path_out);
        test.open(path_out, std::ios::binary | std::ios::out);
        test.write((char*)buffer + ptrIndex->pos_start, ptrIndex->pos_delta);
        test.close();


        ptrIndex++;
    }

    delete[]path_out;
    delete[]index;
    delete[]buffer;

    return 0;
}

Я думал, что проблемы исчезнут go, если я буду использовать ту же версию Visual Studio, что и проект, поэтому я установил Visual C ++ 2008 и более старую версию zlib , только чтобы получить ту же самую ошибку.

Извините, если я веду себя глупо и плохо написала всю эту ситуацию.

...