Пишу либу для создания пэкеджей,для своего двига,как в UDK\UE. Библиотека написана на Qt 5.3.1 Использую метод RLE. Ниже привожу весь необходимый код. Сабж:либа не робит.Никак.Не создаёт файл,не пишет в него,не сжимает. Проверял qDebug'ом значения нужных переменных-выдало лишь 3 из 12 которые я вставил. Вот код:
//Класс машины состояний class STATE_MACHINE_PCKPY { public: int SM_OK(); int SM_FAIL(); int SM_FAILURE(int _aInitErr); int SM_SUCCESS(); int SM_BLOCKING_PACK(); int SM_MEMF(); int SM_MEMK(); int SM_OSF(); int SM_OSK(); int SM_DATAF(); int SM_DATAK(); int SM_INFOLIB(); int SM_INFOCODE(); int SM_INFOPLATF(); int SM_INFOEXT(); int SM_FUTURE(); };
int STATE_MACHINE_PCKPY::SM_OK() { qDebug() << "Ошибок нет."; return 0; }; int STATE_MACHINE_PCKPY::SM_FAIL() { qDebug() << "Ошибка в блоке кода."; return -1; }; int STATE_MACHINE_PCKPY::SM_FAILURE(int _aInitErr) { qDebug() <<"Ошибка в используемых данных."; switch(_aInitErr) { case -1: qDebug() << "Превышена максимальная длина имени пакета."; break; case -2: qDebug() << "Превышен максимальный размер данных для сжатия."; break; case -3: qDebug() << "Превышено максимальное значения уровня сжатия."; break; case -4: qDebug() << "Отсутствуют данные для сжатия."; break; case -5: qDebug() << "Отсутствует имя выходного пакета."; break; case -6: qDebug() << "Уровень сжатия не может быть равен нулю."; break; case -7: qDebug() << "Данные для сжатия пусты."; break; }; qDebug() << "Компиляция невозможна.Устраните ошибки"; return -3; }; int STATE_MACHINE_PCKPY::SM_SUCCESS() { qDebug() << "Проверка пройдена."; return 0; }; int STATE_MACHINE_PCKPY::SM_BLOCKING_PACK() { qDebug() << "Невозможно создать пакет."; return 0; }; int STATE_MACHINE_PCKPY::SM_MEMF() { qDebug() << "Ошибка памяти."; return 2; }; int STATE_MACHINE_PCKPY::SM_MEMK() { qDebug() << "Ошибок памяти нет."; return 0; }; int STATE_MACHINE_PCKPY::SM_OSF() { qDebug() << "ОС которую вы используете не подходит для работы с библиотекой."; return 0; }; int STATE_MACHINE_PCKPY::SM_OSK() { qDebug() << "Проверка на совместимось пройдена."; return 0; }; int STATE_MACHINE_PCKPY::SM_DATAF() { qDebug() << "Ошибок в используемых данных."; return 0; }; int STATE_MACHINE_PCKPY::SM_DATAK() { qDebug() << "Ошибок в используемых данных нет."; return 0; }; int STATE_MACHINE_PCKPY::SM_INFOLIB() { return 0; }; int STATE_MACHINE_PCKPY::SM_INFOCODE() { return 0; }; int STATE_MACHINE_PCKPY::SM_INFOPLATF() { return 0; }; int STATE_MACHINE_PCKPY::SM_INFOEXT() { return 0; }; int STATE_MACHINE_PCKPY::SM_FUTURE() { return 0; };
//Включение машины состояний STATE_MACHINE_PCKPY *_cSMP;
int CompressFile(T_QSTR _aNamePackageOutput, T_QBA _aItemCompressed, T_CINT _aLevelCompress) { //Дефайн-система слежения за размером имени выходного пакета #ifdef WORK_OS_WIN32 if(_aNamePackageOutput.length()>16){ return _cSMP->SM_FAILURE(-1); }; #elif WORK_OS_WIN64 if(_aNamePackageOutput.length()>26){ return _cSMP->SM_FAILURE(-1); }; #elif WORK_OS_UNIX if(_aNamePackageOutput.length()>12){ return _cSMP->SM_FAILURE(-1); }; #elif WORK_OS_LINUX if(_aNamePackageOutput.length()>13){ return _cSMP->SM_FAILURE(-1); }; #elif WORK_OS_MAC if(_aNamePackageOutput.length()>8){ return _cSMP->SM_FAILURE(-1); }; #else #error "ОС которую вы используете не может выполнять работу с файлами данной библиотеки." #endif
//Дефайн-система слежения за размером сжимаемых данных #ifdef WORK_OS_WIN32 if(_aItemCompressed.size()>32){ return _cSMP->SM_FAILURE(-2); }; #elif WORK_OS_WIN64 if(_aItemCompressed.size()>64){ return _cSMP->SM_FAILURE(-2); }; #elif WORK_OS_UNIX if(_aItemCompressed.size()>10){ return _cSMP->SM_FAILURE(-2); }; #elif WORK_OS_LINUX if(_aItemCompressed.size()>11){ return _cSMP->SM_FAILURE(-2); }; #elif WORK_OS_MAC if(_aItemCompressed.size()>8){ return _cSMP->SM_FAILURE(-2); }; #else #error "ОС которую вы используете не может работать с данной библиотекой." #endif
//Дефайн-система слежения за уровнем сжатия #ifdef WORK_OS_WIN32 if(_aLevelCompress>12){ return _cSMP->SM_FAILURE(-3); }; #elif WORK_OS_WIN64 if(_aLevelCompress>18){ return _cSMP->SM_FAILURE(-3); }; #elif WORK_OS_UNIX if(_aLevelCompress>8){ return _cSMP->SM_FAILURE(-3); }; #elif WORK_OS_LINUX if(_aLevelCompress>9){ return _cSMP->SM_FAILURE(-3); }; #elif WORK_OS_MAC if(_aLevelCompress>6){ return _cSMP->SM_FAILURE(-3); }; #else #error "ОС которую вы используете не может выполнять сжатие данных данной библиотеки." #endif
//Проверка аргументов функции
//Проверка на существование сжимаемых данных if(_aItemCompressed.isEmpty()){ return _cSMP->SM_FAILURE(-4); }; //Проверка на пустоту сжимаемых данных if(_aItemCompressed.isNull()){ return _cSMP->SM_FAILURE(-7); }; //Проверка на существование имени выходного пакета if(_aNamePackageOutput == NULL){ return _cSMP->SM_FAILURE(-5); }; //Проверка на правильное значение уровня if(_aLevelCompress == NULL){ return _cSMP->SM_FAILURE(-6); };