![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Загвостка с DLL [WinXP]
atomAltera © (2008-04-27 19:07:00)Приет всем!
Вот имееться приложение(exe), к нему подключина библиотека(dll)...
В exe находиться image1: tImage;
Как мне из dll загрузить в image1 картинку, имея указатель на image1 (@image1), который передаёться из exe в dll в качестве пораметра...
Восхищенный (2008-04-28 14:30:00) [1]Sry за оффтоп.
> ZENsan © (28.04.08 14:15) [13]
O! Молодец, что не обиделся, а принял совет к действию. Я ж говорил - сто раз потом спасибо скажешь - вот и первый.
:о)
ZENsan (2008-04-28 14:15:00) [2]Кстати, Восхищённый. Я уже половину книги прочитал той.. Я конечно многое знал, но были моменты, которых я и не знал. Книга полезная и класная! Спасибо за рекомендацию.
ZENsan (2008-04-28 14:14:00) [3]Ну человек спрашивал... :)
Мало ли что он там придумал, просто ход мыслей у него такой..
Самое красивое, конечно Resource DLL, но ведь из вопроса там неясно для чего, поэтому и сказать что-то определённо тоже не так просто.
Восхищенный (2008-04-28 13:56:00) [4]> Сергей М. © (28.04.08 12:02) [8]
Честно говоря, я тоже не понимаю, на кой здесь нужна DLL. Для задачи, описанной в сабже - точно не нужна. Значит, или описана не вся задача, или беда в консерватории.
Но это уже проблемы автора. Хотел он DLL - получил схему для DLL. Схема рабочая, это вне сомнений. А уж как она будет реализована - это на совести автора. Хотя и в этой схеме никакой надобности в DLL я тоже не вижу.
Почему нет описания нюансов - см. [3]. Слишком долго рассказывать про раздельно компилируемые проекты, про дублирование классов, про экземпляры Application - ну и прочее. Даже на модели вызова - и то не стал останавливаться, тоже долго. Дефолтная - и точка.
Рассказывать про все это сейчас бесполезно. Пока не понабивает шишек, все равно не поймет.
Leonid Troyanovsky (2008-04-28 13:55:00) [5]
> ZENsan © (28.04.08 12:29) [9]
> Может конечно ещё что-то есть
Можно предcтавить и третье.
Экзешник загружает в TImage bitmap из ресурсов dll.
Идеологически оно будет самым выдержанным,
но ТЗ следует пересмотреть (идеологически :)
--
Regards, LVT.
ZENsan (2008-04-28 12:29:00) [6]Есть два решения:
1) Используй PACKAGES (тоесть компилируй прогу с Run-time packages и используй LoadPackage - тогда сможешъ подавать хоть напрямую TImage). В ДЛЛ просто отдельные копии модулей, тоесть и классов. Поэтому ничего работать не будет.
2) Используй memory mapped files.
Может конечно ещё что-то есть, но самый елегантный для этого способа, помоему run-time packages. Создай вместо ДЛЛ package.
Сергей М. (2008-04-28 12:02:00) [7]
> Восхищенный (28.04.08 11:24) [5]
А где сотня-другая страниц текста с сопроводительным ликбезомна тему при каких условияхэтот код будет работоспособным ?)
Leonid Troyanovsky (2008-04-28 11:46:00) [8]
> Leonid Troyanovsky © (28.04.08 11:40) [6]
> Да и нах TImage в длл? Чтоб рисовать потом в экзе? :)
А.., пропустил симптом, sorry.
Но, все равно, лучше огласить всю задачу,
желательно на русском.
--
Regards, LVT.
Leonid Troyanovsky (2008-04-28 11:40:00) [9]
> atomAltera © (28.04.08 07:27) [4]
> Приведите плиз действующий пример...
Для приведенной в [0] схемы можно смело положить,
что действующего примера нет.
Да и нах TImage в длл? Чтоб рисовать потом в экзе? :)
Если уж очень хочется картинку, можешь, например,
загрузить bitmap из ресурсов экзешника.
--
Regards, LVT.
Восхищенный (2008-04-28 11:24:00) [10]В DLL:
type
TLoadImageProc = procedure(Image: Pointer);
var
_Proc: TLoadImageProc;
procedure SetProc(Proc: TLoadImageProc); // exports
begin
_Proc := Proc;
end;
procedure LoadImage(Image: Pointer); // exports
begin
_Proc(Image);
end;
В EXE:
procedure Proc(Image: TImage);
begin
// Загрузка картинки в Image;
end;
procedure LoadImage(Image: TImage);
begin
// Вызывем LoadImage из DLL, передаем Image
end;
initialization
// Грузим DLL, вызываем SetProc, передаем @Proc
atomAltera (2008-04-28 07:27:00) [11]Приведите плиз действующий пример...
Восхищенный (2008-04-27 20:19:00) [12]> atomAltera © (27.04.08 19:07)
1. Image1 - уже и так адрес, поэтому @ не нужна.
2. Долго объяснять, почему этот так, поэтому объяснять не буду, а просто скажу, как будет лучше и проще. Передавай в DLL не только адрес Image, а еще и адрес процедуры, которая находится в EXE и загружает картинку. Вызываешь эту процедуру из DLL, передаешь ей Image - она в этот Image грузит картинку.
atomAltera (2008-04-27 19:52:00) [13]Вот и научи меня....
Сергей М, (2008-04-27 19:11:00) [14]
> имея указатель на image1 (@image1)
Эт кто ж тебя научил этому ?
И гвоз дь, кстати, пишется через д.