2010-07-07 5 views
0

EDIT: Я добавил еще несколько строк программы к фрагменту кода ниже.Ошибка файла с LoadImage() (Windows)

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

BITMAP BMP; 
HBITMAP hBMP; 

hBMP = (HBITMAP)LoadImage(GetModuleHandle(NULL), "Test.bmp", IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADFROMFILE); 
if (!hBMP) return 1; 

GetObject(hBMP, sizeof(BMP), &BMP); 

и когда я запускаю программу, он выходит из строя. Я использовал GetLastError(), который возвратил 2/FILE_NOT_FOUND, но файл («Test.bmp») находится в папке .exe. Может кто-нибудь указать, что не так с линией кода (или если ошибка не в этой строке)?

ответ

0

вы должны попробовать использовать полный путь к вашему приложению.

Кроме того, аргументы main() содержат текущий путь приложения, поэтому вы можете добавить его в свою строку.

0

Ваше изображение живет в TEMP Пути я считаю, как выполнение происходит ...

Окружающая среда :: GetEnvironmentVariable ("TEMP") + "\ Button.bmp";

1

Возможно, вы работаете в отладчике, как это началось с IDE? Текущий рабочий каталог может отличаться от того, что вы думаете.

EDIT: Используя Process Explorer, из sysinternals вы можете видеть, что текущий рабочий каталог является тем, который содержит ваш файл решения, если используется Visual Studio, а не каталог, в котором созданы ваши двоичные файлы.

3

Используйте GetCurrentDirectory, чтобы узнать, какой каталог по умолчанию, может быть, не где находится исполняемый файл. Я бы предложил использовать полный путь к вашему файлу.

+0

Я попытался сменить его на «C: \ Test.bmp» (и поместив там копию файла), а GetLastError() вернет 0, но программа по-прежнему падает, когда я пытаюсь получить доступ к чему-то вроде ширины битовая карта. – 2010-07-08 22:17:36

+0

@ Keand64: функция LoadImage возвращает дескриптор в растровое изображение. Чтобы получить информацию из дескриптора, используйте функцию GetObject. Если вы покажете еще какой-нибудь код, это будет полезно. –

+0

Да, у меня была функция GetObject(), я просто не думал, что это относится к вопросу в то время. Теперь я добавил его к фрагменту кода, который я написал, хотя. – 2010-07-09 07:50:24