ресурсы из dll файла

Вопросы программирования и использования среды Lazarus.

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

ресурсы из dll файла

Сообщение azatsh » 12.11.2010 13:16:40

У меня следующая проблема. По виндовс я сделал программку которая открывает dll'ку и при помощи TResourceStream использует ресурсы "зашитые" в нее. Dll'ку эту делал я сам. Так вот. В виндовс все работает. Но в ubuntu тот же самый подход выдает не найден ресурс. Приведу вкратце строчки исходного кода:

Библиотека:

Код: Выделить всё
library Project2;
{$R project.res}
begin
end.


Файл project.res собран при помощи brcc32.exe (под Windows).

Далее в программе:

Код: Выделить всё
..................
hRes := LoadLibrary(curdir + 'project2.so');
ResStream := TResourceStream.Create(hRes, 'myfile', RT_RCDATA);     // вот здесь вылетает ошибка!!!!!
..................


Не знаю че делать. Может в никсах нельзя ресурсы хранить и вытаскивать из dll ?!
Хранить ресурсы мне нужно именно в отдельном файле! Компилить ресурсы вместе с программой для моей задачи не катит.
Готов выслушать и другие варианты по поводу хранения ресурсов в отдельном файле (не в dll).
azatsh
новенький
 
Сообщения: 33
Зарегистрирован: 20.07.2010 10:14:04

Re: ресурсы из dll файла

Сообщение Иван Шихалев » 12.11.2010 14:00:18

Под Linux нет аналога ресурсам Windows. Нужно хранить данные как-то иначе. От самих данных зависит — как.
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Re: ресурсы из dll файла

Сообщение Odyssey » 12.11.2010 14:16:07

Имхо, хранить ресурсы в бинарных исполняемых файлах (exe, dll, so, linux elf) -- очень не хорошо. Единственное исключение - когда нужно чтобы программа была в виде единственного файла, и тогда все ресурсы включаются в основной исполняемый файл. Поэтому проблемой хранения ресурсов в динамических библиотеках *.so под Linux я не озадачивался и решения именно для *.so у меня нет.

По поводу других вариантов:
1) Архив zip или tar. Придётся посмотреть несколько библиотек (TZipper + вот эти) и выбрать подходящую, и понять как с ней работать без временных файлов. В плюсе -- отсутствие внешних зависимостей, т.е. необходимости во внешних dll/so. Могут быть проблемы с производительностью при больших файлах (сотни и тысячи мегабайт).
2) БД SQLIte + BLOB-поля. Будет зависимость от одной внешней dll/so. Производительность должна быть хорошей даже при больших файлах.
Последний раз редактировалось Odyssey 12.11.2010 14:20:08, всего редактировалось 1 раз.
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

Re: ресурсы из dll файла

Сообщение Sergei I. Gorelkin » 12.11.2010 14:18:20

Вообще-то в FPC давным-давно реализована кроссплатформенная работа с ресурсами, представленная пакетом fcl-res и поддержкой в RTL. Другое дело, что в ней, как и во всем остальном, хватает багов. Вот что-то в тему: http://bugs.freepascal.org/view.php?id=17805
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: ресурсы из dll файла

Сообщение alexs » 12.11.2010 22:25:51

azatsh писал(а):Файл project.res собран при помощи brcc32.exe (под Windows).

Вот этот момент смущает для линуха. И, естетсвенно, не надо делать вызовы виндовые под линухом.
Посмотри fcl-res и для примера в RxFPC работу с ресурсами. Я там беру версию файла.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: ресурсы из dll файла

Сообщение azatsh » 15.11.2010 19:13:45

Всем спасибо! Проблему решил.
azatsh
новенький
 
Сообщения: 33
Зарегистрирован: 20.07.2010 10:14:04

Re: ресурсы из dll файла

Сообщение dunin » 16.11.2010 00:13:29

azatsh писал(а):Всем спасибо! Проблему решил.

Как на счет поделиться с общественностью? :?
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

Рейтинг@Mail.ru