FPC-ресурсы

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
Аватара пользователя
hinst
энтузиаст
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

FPC-ресурсы

Сообщение hinst »

Попытался использовать FPC-ресурсы. Создал файл ресурсов с расширением .res одной программкой. В файле две картинки. Прописал им названия. Прописал путь к файлу ресурсов в модуле
{$R yesno_panel.res}
Проект компилируется. Проблема в том, что когда я пытаюсь загрузить данные

Код: Выделить всё

  stream := TResourceStream.Create(HINSTANCE, upperCase('yesno_panel_bitmap_yes'), 'BITMAP');

то валится исключение, типа ресурс не найден.
И можно было бы свалить ошибку на мою личную тупость, если бы не одна делать: открываю редактором прямо-таки исполняемый файл (тот самый, с расширением .exe который), и вижу в нём в разделе Bitmap эти две картинки. И названы они как надо yesno_panel_bitmap_yes, только капсом, и редактор показывает, что они сгенерированы из такой строки
YESNO_PANEL_BITMAP_NO BITMAP "?"
то есть, и имя, и тип совпадают, только имя исходного файла "?", ну это и понятно, потому что после компиляции ресурсов информация об исходных файлах теряется. В связи с этим, есть у меня подозрение, что это FPC глючит :shock:
Ресурс есть, а он не видит его :shock:
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

FPC здесь не причём т.к. он использует непосредственно функции WinAPI для поиска и загрузки ресурса.
Возможно у вас не соответствует тип или в имени что-то не так, а возможно "одна программа" создаёт ресурсы не того типа!
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Тип ресурса (последний аргумент) должен быть PChar(RT_BITMAP).
Аватара пользователя
hinst
энтузиаст
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Сообщение hinst »

вот оно как всё не очевидно оказалось...

Код: Выделить всё

RT_BITMAP       =  2;

да ещё и PChar от двух. Тем не менее, спасибо
Ответить