Форум: "Начинающим";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];
ВнизПример по работе с ресурсами из DLL Найти похожие ветки
← →
Интересующийся (2006-02-11 15:02) [0]Нужен пример или инфа по вопросу получения ресурсов из DLL и выгрузке их в файл или передачи по сети.
Нужны:
1. Полный список процедур и функций.
2. Примеры по работе (если есть).
3. Статьи по этому вопросу.
← →
Defunct © (2006-02-11 15:14) [1]:)
говорил же не упонинать о выгрузке в файл и про передачу по сети. ну да ладно.
имеется 2 пути. Первый и наиболее простой путь: подключить модуль ShareMem первым в DLL и в HOST приложении и экспортировать из DLL все что будет угодно влоть до создаваемых в DLL экземляров классов.
Второй путь: экспортировать из DLL функции, с помощью которых будет осуществляться передача данных.
пример для первого варианта:Library MyDll;
uses ShareMem, SysUtils;
type TMyClass = class
end;
var
MyClass : TMyClass;
exports
MyClass;
end.
Для второго можете почитать здесь: http://www.helloworld.ru/texts/comp/lang/delphi/dll/
← →
Интересующийся (2006-02-11 15:17) [2]Проблема такова:
1. Динамически открываю DLL (при помощи LoadLibrary)
2. Получаю указатель на текстовый или графический ресурс
3. После чего нужно передать ресурс по сети клиенту (Использую TServerSocket)
P.S
При выгрузке ресурса в файл (на диск) правильно удается определить только размер ресурса, а в файл выгружается мусор.
← →
Defunct © (2006-02-11 15:19) [3]> 2. Получаю указатель на текстовый или графический ресурс
Подробнее с этого места, и лучше сразу с примером кода.
← →
Интересующийся (2006-02-11 15:28) [4]> Для второго можете почитать здесь: http://www.helloworld.ru/texts/comp/lang/delphi/dll/
Полезный текст, но мне нужна работа с ресурсами состоящими из текста, графики и простых файлов
P.S.
http://delphimaster.net/view/6-1139633936/
Интересующийся (11.02.06 15:00) [18]
>> Если говоря о ресурсе DLL, вы имеете в виду нечто другое (не .rc), тогда все должно сводиться к получению данных из DLL
>Это мне и нужно.
Текс ошибочен.
← →
Defunct © (2006-02-11 15:46) [5]Создаем .rc файл, подключаем его к проекту, далее в проекте загружаем требуемый ресурс, например так:
var
Stream : TResourceStream;
begin
Stream := TResourceStream.Create( HInstance, "Имя ресурса", <Тип ресурса> );
try
Cделать с ресурсом что-то, либо ничего не делать
finally
Stream.Free
end;
если проект - это DLL, то подключив ShareMem, загруженные ресурсы можно сразу экспортировать. Вам это требовалось?
← →
Интересующийся (2006-02-11 15:49) [6]Код работы пока дать немогу.
Но принцип таков:
1. Читаю при помощи LoadLibrary(), получаю Dll доступ к Dll
2. Определяю пазицию ресурса в DLL при момощи FindResource()
Ресурсы по типу RT_BITMAP, RT_ICON, RT_STRING или RT_RCDATA
3. Далее следует применить одну из слудующих вещей:
LoadResource, LoadBitmap, LoadString, LoadIcon (в зависимости от типа ресурса)
Здесь начинуются все проблемы
4. Здесь нужно передать ресурс в сеть
5. Выгружаем DLL при помощи FreeLibrary()
← →
Интересующийся (2006-02-11 15:55) [7]> Defunct © (11.02.06 15:46) [5]
> Если проект - это DLL, то подключив ShareMem, загруженные ресурсы можно сразу экспортировать. Вам это требовалось?
Что за ShareMem? (Я с ним врервые сталкнулся)
← →
Интересующийся (2006-02-11 16:01) [8]Насколько я понимаю при работе с графикой страка с TResourceStream будет таковой:
Stream:=TResourceStream.Create(HInstance,"Имя ресурса",RT_BITMAP);
общий вид таков:
Stream:=TResourceStream.Create(HInstance,"Имя ресурса",RT_RCDATA);
Где HInstance = получаем при помощи LoadLibrary().
← →
Defunct © (2006-02-11 16:10) [9]> 2. Определяю пазицию ресурса в DLL при момощи FindResource()
> Ресурсы по типу RT_BITMAP, RT_ICON, RT_STRING или RT_RCDATA
Все! понял
> Что за ShareMem? (Я с ним врервые сталкнулся)
Это модуль соответствующим образом настраивает Borland менеджер памяти, что в свою очередь дает возможность использовать из Host приложения память и переменные DLL, и наоборот. Но похоже в вашем случае он не понадобится.
> Где HInstance = получаем при помощи LoadLibrary().
Да
← →
Интересующийся (2006-02-11 16:15) [10]Все понял, за совет спасибо!!!
Буду пробовать изменить свой код для работы TResourceStream.
← →
isasa © (2006-02-11 17:33) [11]А чем обидел, например, такой вариант для строкового ресурса
function TbForm.StrRes(i: integer): string;
var buf : PChar;
begin
buf:=strAlloc(MaxMsgLen);
LoadString(resHnd, i, buf, MaxMsgLen);
Result:=StrPas(buf);
strDispose(buf);
end;
i - индекс в ресурсе STRINGTABLE
resHnd:=LoadLibrary("<файл DLL>");
Для графики - соответственно
HBITMAP LoadBitmap(
HINSTANCE hInstance, // handle to application instance
LPCTSTR lpBitmapName // name of bitmap resource
);
Ну а дальше - передача string по сокету ...
← →
isasa © (2006-02-11 17:36) [12]Да, в данном случае, никаких ShareMem не надо :)
← →
Defunct © (2006-02-11 17:38) [13]> isasa ©
ничем не обидел, просто ResourceStream дает возможность отчасти абстрагироваться от кучи проблем, его сразу можно отправлят через сокет.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.045 c