Форум: "Прочее";
Текущий архив: 2007.08.05;
Скачать: [xml.tar.bz2];
ВнизПроцедура или функция в DLL Найти похожие ветки
← →
Nic © (2007-07-06 14:26) [0]Приветсвую мастера! Не могли бы вы подсказать как можно выполнить следующую задачу.
В dll имеется некий процесс, в котором выполняются такие операции как инициализация, обработка, рассчёты, финализация.
Как можно сделать так, чтобы были процедуры, выполняющие эти операции таким образом, что наполнение этих процедур осуществляется из Exe, а всё остальное - "варится" в Dll.
То есть, требуется как бы обяъявить несколько типовых подпрограмм и, если это необходимо, заполнять их из основной программы. Но при этом сами процедуры лежат в Dll.
Заранее спасибо за ответы.
← →
Kolan © (2007-07-06 14:27) [1]> заполнять их из основной программы
Не оч. понятно что значит наполнять процедуры…
← →
Nic © (2007-07-06 14:33) [2]
> Kolan © (06.07.07 14:27) [1]
Скажем так, объявили как бы пустую процедуруа, которая присутсвует в работе каждого из типовых приложений. По умолчанию она ничего не делает. Но, при необходимости туда может понадобиться вписать произвольный код из программы.
Сумбурно как-то выразился, но надеюсь, мысль ясна ;) Если что, могу ещё подробней раскрыть вопрос.
← →
Kolan © (2007-07-06 14:39) [3]> Но, при необходимости туда может понадобиться вписать произвольный
> код из программы.
Что ты хочешь динамически изменить код процедуры??? Я что-то думал о тебе лучьше. Решение есть, но я точно тебя правильно понял.
Те ты хочешь во время работы приложения изменить код процедуры, так?
Иначи — это Copy/Paste называется
← →
Карелин Артем © (2007-07-06 14:42) [4]Можно сделать указатель на типизированную функцию или процедуру. И присваивать нужное
← →
Nic © (2007-07-06 14:48) [5]
> Kolan © (06.07.07 14:39) [3]
Вы не совсем так меня поняли...
Разрабатываю Dll, в нём создаётся окно и рисуются определённые данные. Для рисования данных не всегда нужно загружать модели, текстуры и т.д., а иногда нужно.
Рисование тоже часто бывает очень спеццэффичным. Поэтому нужно предусмотреть, чтобы процедура или функция могла бы быть написана в самой программе, а внутри Dll при процессе прорисовки она бы вызывалась.
Что же в этом плохого? Подчеркну, что dll самописная и вызывающая программа тоже самописная.
То есть в dll пишется некий костяк для реализации во множестве похожих проектов, а из самого проекта вызываются только средства dll, но при необходимости, дописывается что-то спецэффичное.
← →
Kolan © (2007-07-06 14:48) [6]> Решение есть, но я точно тебя правильно понял.
Это паттерн состояние/стратегия.
← →
Nic © (2007-07-06 14:49) [7]
> Карелин Артем © (06.07.07 14:42) [4]
Наверное это мне и нужно. Погуглю. Спасибо.
← →
Nic © (2007-07-06 14:50) [8]
> Kolan © (06.07.07 14:48) [6]
А что же плохого в использовании паттернов "состояние/стратегия"? ;)
> Kolan © (06.07.07 14:39) [3]
> Что ты хочешь динамически изменить код процедуры??? Я что-
> то думал о тебе лучьше.
← →
Kolan © (2007-07-06 14:56) [9]> [5] Nic © (06.07.07 14:48)
[6] Должно подойти, но я бы использовал пакеты, с ними проще будет.
> Для рисования данных не всегда нужно загружать модели, текстуры
> и т.д., а иногда нужно.
Принцип работы такой. Но сначала прочти про этот паттерн.
У тебя есть иерархия(для данного пример упростим до двух классов).
Общий нитерфейс: Draw — это та операция, которую вызывают для рисования.IStrategy = interface
procedure Draw();
end;TSimpleStarategy = class(TInterfacedObject, IStrategy)
— реализует рисование без моделей.TModelDrivenStrategy = calss(TSimpleStarategy)
— реализует рисование c загрузкой моделей.
А потом объявляешь переменнуюvar
Drawer: IStrategy
И пользуешь так:
Надо без загрузки моделей:Drawer := TSimpleStarategy.Create;
Drawer.Draw
C загрузкойDrawer := TModelDrivenStarategy.Create;
Drawer.Draw
Вот суть.
← →
Nic © (2007-07-06 14:59) [10]
> Kolan © (06.07.07 14:56) [9]
Спасибо огромное! Домой приеду попробую :) А что плохого в этом подходе?
← →
Kolan © (2007-07-06 15:02) [11]> А что плохого в этом подходе?
Я разве говорил что это плохо? Имхо эт. оч. хорошо, просто я сомневался что вы именно этого хотите.
Но! Вначале прочтите про паттерн. А затем используйте BDS Create by pattern — GoF — State/Startegy чтобы понять реализацю.
Я кстати в[9] Kolan © (06.07.07 14:56)
неправильно назвалIStrategy
это я описал паттерн Состояние(State), а не стратегию. Но они похожи сильно.
← →
Kerk © (2007-07-06 15:07) [12]> [11] Kolan © (06.07.07 15:02)
Во времена моей молодости это полиморфизмом называли. А сейчас всякие крутые слова придумали типа "патерн" или даже "Состояние/стратегия" :)
← →
Kolan © (2007-07-06 15:10) [13]> Во времена моей молодости это полиморфизмом называли.
Дык он на полиморфизме основан ессно. А как без него. Просто чётко описано че длать.
Тип рафакторингаReplace Conditional with Polymorphism
и предлогает решения:
To create the inheritance structure you have two options: Replace Type Code with Subclasses and Replace Type Code with State/Strategy.
← →
Сергей М. © (2007-07-06 15:20) [14]
> В dll имеется некий процесс
Галиматья ведь)
Поучиться б тебе, барин)
← →
Kerk © (2007-07-06 15:21) [15]> [13] Kolan © (06.07.07 15:10)
Я не пойму зачем нагромождать терминологию? Разве у полиморфизма есть другие применения?
← →
Kolan © (2007-07-06 15:26) [16]> Я не пойму зачем нагромождать терминологию?
Ответ «используй паттерн состояние» и «используй полиморфизм» — имхо имеют разную «понятность» че конкретно делать.
> Разве у полиморфизма есть другие применения?
Применить можно как угодно. в [13] уже два варианта как видишь.
← →
Kolan © (2007-07-06 15:33) [17]> [15] Kerk © (06.07.07 15:21)
Согласись абстрактная фабрика например тоже полиморфизм и в принципе оч. похожа на состояние, но это совсем разные веши…
← →
Юрий Зотов © (2007-07-06 15:45) [18]> нужно предусмотреть, чтобы процедура или функция могла бы быть
> написана в самой программе, а внутри Dll при процессе прорисовки она бы
> вызывалась.
Элементарно - callback. Адрес своей процедуры (функции) программа передает параметром при вызове процедуры (функции) DLL. Та, когда ей нужно, вызывает эту переданную ей процедуру (функцию).
← →
Nic © (2007-07-06 18:40) [19]
> Сергей М. © (06.07.07 15:20) [14]
>
> > В dll имеется некий процесс
>
>
> Галиматья ведь)
>
> Поучиться б тебе, барин)
Не стыдно не знать, а стыдно не хотеть учиться ;) Раскройте мысль более широко.
Но если что, под процессом в данном контексте я подразумевал не совсем то, что имели в виду Вы или я ошибаюсь?
> Юрий Зотов © (06.07.07 15:45) [18]
Спасибо за ещё один ваоиант решения проблемы :beer: :)
Конкретные примеры я сам разыщу. А вот какой из 3-х предложенных методов теперь выбрать - это вопрос :)
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2007.08.05;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.04 c