Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.08.05;
Скачать: CL | DM;

Вниз

Процедура или функция в DLL   Найти похожие ветки 

 
Nic ©   (2007-07-06 14:26) [0]

Приветсвую мастера! Не могли бы вы подсказать как можно выполнить следующую задачу.

В dll имеется некий процесс, в котором выполняются такие операции как инициализация, обработка, рассчёты, финализация.

Как можно сделать так, чтобы были процедуры, выполняющие эти операции таким образом, что наполнение этих процедур осуществляется из Exe, а всё остальное - "варится" в Dll.

То есть, требуется как бы обяъявить несколько типовых подпрограмм и, если это необходимо, заполнять их из основной программы. Но при этом сами процедуры лежат в Dll.

Заранее спасибо за ответы.


 
Kolan ©   (2007-07-06 14:27) [1]

> заполнять их из основной программы

Не оч. понятно что значит наполнять процедуры&#133


 
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)

Согласись абстрактная фабрика например тоже полиморфизм и в принципе оч. похожа на состояние, но это совсем разные веши&#133


 
Юрий Зотов ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.019 c
2-1183982241
..::KraN::..
2007-07-09 15:57
2007.08.05
Из ImageList в image


15-1184183548
Иксик
2007-07-11 23:52
2007.08.05
Посоветуйте minidv видеокамеру в пределах 300 евро.


1-1180200153
Calibr
2007-05-26 21:22
2007.08.05
Текст с консоля


2-1184063392
AZIZE
2007-07-10 14:29
2007.08.05
Вопрос на засыпку


15-1183976760
ProgRAMmer Dimonych
2007-07-09 14:26
2007.08.05
Как организовать ShoutCast?