Исполняется с использованием изображений в другом каталоге - PullRequest
1 голос
/ 15 февраля 2012

У меня следующая структура каталогов

<code>       (root)
  /      |        \
bin    resources  src
|        |         |
Debug  dot.bmp   .cpp
|
.exe

Я бы хотел, чтобы файл .exe использовал dot.bmp.

Вот код изфайл .cpp, который загружает dot.bmp

player_img = il->load_image( "dot.bmp" );

Я чувствую, что мне нужно изменить эту строку кода, но после изменения на:

player_img = il->load_image( "../resources/dot.bmp" );

Я все еще получаю сообщение о том, что изображение не может быть загружено.

Что мне нужно изменить?Это вообще возможно, или я должен просто сдаться и поместить изображение в тот же каталог, что и .exe?

1 Ответ

1 голос
/ 15 февраля 2012

Вам нужно пройти еще один уровень ниже, чтобы получить доступ к корню.

../../resources/dot.bmp

Ваш исполняемый файл находится в bin/Debug, но я думаю, что вы закодировали в предположении, что он находится в bin.

Если вы работаете в Windows, относительный путь будет относительно текущего рабочего каталога, а не каталога, в котором находится исполняемый файл.Часто это одно и то же, но не обязательно.

Я был бы склонен использовать полные пути и предварительно ожидать каталог, в котором находится исполняемый файл.Вы можете получить это, вызвав GetModuleFileName, передав NULL в качестве аргумента hModule.Это вернет полный путь к исполняемому файлу, поэтому вам нужно будет удалить часть имени файла.

Вам также нужно будет подумать о развертывании.Эта структура выглядит как ваша структура разработки, но при развертывании программы вам может потребоваться другая организация.Например, я ожидаю, что исполняемый файл будет находиться в каталоге bin при развертывании.

Одна заключительная мысль.Предполагая, что образы, в которых нуждается ваша программа, известны во время компиляции, было бы намного проще связать их в исполняемый файл как ресурсы.Таким образом, вам просто не нужно беспокоиться об этих проблемах, и исполняемый файл может оставаться в одиночестве.

...