Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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]

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

Не оч. понятно что значит наполнять процедуры&#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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.04 c
2-1184063392
AZIZE
2007-07-10 14:29
2007.08.05
Вопрос на засыпку


2-1184062709
AleksandrR
2007-07-10 14:18
2007.08.05
Работа с датой


2-1184052234
AZIZE
2007-07-10 11:23
2007.08.05
несовместимость типов


15-1183808974
Bertoluchi
2007-07-07 15:49
2007.08.05
Встречайте новичка


2-1183966562
0xFF01
2007-07-09 11:36
2007.08.05
FocusRect





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский