Проблемы с путем к файлу
|
|
daffy-doomer | Дата: Вторник, 06 Января 2015, 13:09 | Сообщение # 1 |
частый гость
Сейчас нет на сайте
| Использую библиотеку DevIL Код void LoadTexture(char st1[250],int i) { char name[250]; char filename[200]="gfx\\"; GetModuleFileNameA(NULL, name, 250);
for(int j=strlen(name);name[j]!='\\';j--) name[j]='\0';
strcat(name, filename); TextureImage texture10;
strcpy(filename,name); strcat(filename,st1); puts(filename);// ilLoadImage((ILstring)filename); int err = ilGetError(); if(err != IL_NO_ERROR) { cout << "Error an loading textures!" << endl; getch(); exit(1); } ... Рядом с исполняемым файлом есть папка gfx, в ней лежит изображение, название которого прописывается.
Код именно на путь до файла объявляемого в методе. Puts показывает путь, а сама библиотека его не видит... В чем ошибка?
Добавлено (06 января 2015, 13:09) --------------------------------------------- При использовании прописания прямого пути, ничего не изменяется. Но стоит вместо IlLoadImage() вписать IlLoad, вылетает вот такое, вместе с крашем:
Сообщение отредактировал daffy-doomer - Вторник, 06 Января 2015, 13:10 |
|
| |
MrFiring | Дата: Среда, 07 Января 2015, 08:08 | Сообщение # 2 |
был не раз
Сейчас нет на сайте
| Цитата daffy-doomer ( ) char name[250]; char filename[200]="gfx\\"; GetModuleFileNameA(NULL, name, 250);
for(int j=strlen(name);name[j]!='\\';j--) name[j]='\0';
strcat(name, filename); TextureImage texture10;
strcpy(filename,name); strcat(filename,st1);
Зачем столько заморочек для того чтобы получить путь?
В аргументах функции можно использовать указатель на char. Поскольку папка с текстурами находится в директории с экзешником то путь можно записать так:
"./gfx/texture1.png"
Код #include <sstream> //Класс для форматирования строк.
void LoadTexture(const char* FileName, int i) { const char* dir = "./gfx/"; stringstream str; //Создаём поток ввода-вывода строки
str << dir << FileName; //Добавляем наши строки в конец строки потока
ilLoad(IL_PNG, str.str().c_str()); // с помощью str.str().c_str() получаем строку int err = ilGetError(); if(err != IL_NO_ERROR) { cout << "Error an loading textures!" << endl; getch(); exit(1); }
... }
Сообщение отредактировал MrFiring - Среда, 07 Января 2015, 08:22 |
|
| |
daffy-doomer | Дата: Четверг, 08 Января 2015, 22:49 | Сообщение # 3 |
частый гость
Сейчас нет на сайте
| MrFiring, да, метод не работает "Error an loading textures!" выводит это))) А вот из консоли puts(FileName) P.S. у меня юникод)))
|
|
| |
OpenGOO | Дата: Пятница, 09 Января 2015, 00:51 | Сообщение # 4 |
почти ветеран
Сейчас нет на сайте
| Вот так еще проще было бы Код const string dir = "./gfx/"; string path = dir + FileName;
Какую конкретно ошибку возвращает функция ilLoadImage?
Если у тебя винда. Совпадает ли путь где находится исполняемый файл, с путём который показывает в консоле эта команда ? Для неё надо добавить заголовочный файл cstdlib
Мои проекты: - Свободный и открытый клон World Of Goo - TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)
[GameMaker: Studio v1.4.9999]
|
|
| |
falcoware | Дата: Пятница, 09 Января 2015, 01:34 | Сообщение # 5 |
старожил
Сейчас нет на сайте
| daffy-doomer, ну если уникод то char испльзовать нельзя. Используй char_t
|
|
| |
OpenGOO | Дата: Пятница, 09 Января 2015, 02:07 | Сообщение # 6 |
почти ветеран
Сейчас нет на сайте
| Цитата falcoware ( ) Используй char_t Что за тип такой, может wchar_t?
Мои проекты: - Свободный и открытый клон World Of Goo - TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)
[GameMaker: Studio v1.4.9999]
|
|
| |
daffy-doomer | Дата: Пятница, 09 Января 2015, 13:49 | Сообщение # 7 |
частый гость
Сейчас нет на сайте
| OpenGOO, falcoware либа DevIL просто отказывалась читать даже прямой путь к файлу. Юзаю FreeImage
|
|
| |
12334q | Дата: Пятница, 09 Января 2015, 17:09 | Сообщение # 8 |
был не раз
Сейчас нет на сайте
| 100% верное средство Код
std::string str = "sfx//"; str += name;
//использование str
str.c_str();
///////////////////////////////////////////// //для широких символов (wide) wchar_t* //std::wstring wstr = "sfx//";
если нет то значит проблема в использовании движка. может он символы как то не так читает не в той кодировке хотя там проблема с указателем. было бы проще если IDE была на английском языке
Сообщение отредактировал 12334q - Пятница, 09 Января 2015, 17:35 |
|
| |
MrFiring | Дата: Пятница, 09 Января 2015, 19:57 | Сообщение # 9 |
был не раз
Сейчас нет на сайте
| Цитата 12334q ( ) Если уж на то пошло,то тут нужны два задних слеша либо вообще один обычный.Или я чего-то не знаю?
Сообщение отредактировал MrFiring - Пятница, 09 Января 2015, 20:01 |
|
| |
12334q | Дата: Пятница, 09 Января 2015, 20:22 | Сообщение # 10 |
был не раз
Сейчас нет на сайте
| MrFiring, так можно и одну / у мена и так и так по разному всё работает главное \\ два раза чтоб эскейп последовательности не было
........ хотя \\ это и есть эск.последовательность чтобы вывести обратный слэш
Сообщение отредактировал 12334q - Пятница, 09 Января 2015, 20:26 |
|
| |
MrFiring | Дата: Пятница, 09 Января 2015, 20:45 | Сообщение # 11 |
был не раз
Сейчас нет на сайте
| Цитата 12334q ( ) у мена и так и так по разному всё работает главное \\ два раза чтоб эскейп последовательности не было
"//" я такой записи еще не видел.Следовательно принял за неправильную..
Цитата 12334q ( ) ........ хотя \\ это и есть эск.последовательность чтобы вывести обратный слэш
Это я знаю.
|
|
| |
12334q | Дата: Пятница, 09 Января 2015, 21:34 | Сообщение # 12 |
был не раз
Сейчас нет на сайте
| Цитата MrFiring ( ) .. у вас двоеточие упало
|
|
| |