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

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

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

Ответить
azatsh
новенький
Сообщения: 33
Зарегистрирован: 20.07.2010 10:14:04

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

Сообщение azatsh »

У меня следующая проблема. По виндовс я сделал программку которая открывает 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).
Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

Сообщение Иван Шихалев »

Под Linux нет аналога ресурсам Windows. Нужно хранить данные как-то иначе. От самих данных зависит — как.
Odyssey
энтузиаст
Сообщения: 580
Зарегистрирован: 29.11.2007 16:32:24

Сообщение Odyssey »

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

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

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

Вообще-то в FPC давным-давно реализована кроссплатформенная работа с ресурсами, представленная пакетом fcl-res и поддержкой в RTL. Другое дело, что в ней, как и во всем остальном, хватает багов. Вот что-то в тему: http://bugs.freepascal.org/view.php?id=17805
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

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

Вот этот момент смущает для линуха. И, естетсвенно, не надо делать вызовы виндовые под линухом.
Посмотри fcl-res и для примера в RxFPC работу с ресурсами. Я там беру версию файла.
azatsh
новенький
Сообщения: 33
Зарегистрирован: 20.07.2010 10:14:04

Сообщение azatsh »

Всем спасибо! Проблему решил.
Аватара пользователя
dunin
энтузиаст
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и
Контактная информация:

Сообщение dunin »

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

Как на счет поделиться с общественностью? :?
Ответить