Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Методы и процедуры [D7, WinXP]


Страницы:   1 2 3

Doma ©   (2006-09-15 18:48:00) 

Всем привет!
Помогите разобраться.

Есть два типа:

TMyProc1 = procedure(a,b: integer);
TMyProc2 = procedure(a,b: integer) of object);
PMyProc1 = ^TMyProc1
PMyProc2 = ^TMyProc2;

И есть процедура, который выполняет процедуры типа TMyProc1

procedure ExecProc1(proc: PMyProc1; a,b: integer);
var p: TMyProc1;
begin
 @p := proc;
 p(a,b);
end;

Задача сделать так чтобы эта же процедура могла выполнчть и методы типа TMyProc2.


Doma   (2006-09-15 20:21:00) [21]

Могу сказать, что у меня все учтено было заранее и переписовать мне ничего не придется... я немного не так сформулировал проблему, изначально у меня все было как показано в [1], потом я уже захотел туда внести делфевые методы... чтобы писать было легче, потому что система плагинов на компонентах реализована, а создать метод можно двойным кликом по инсектору объектов, а писать процедуру немного дольше, вот я и думал над оптимизацие... Теперь буду думать над другой проблемой, как можно компонентой создавать в дизайн-тайме шаблоны процедур...
Еще раз спасибо за отклики...


Doma   (2006-09-15 20:16:00) [22]


> Lamer@fools.ua ©   (15.09.06 20:13) [28]
> Не такой уж и плохой вариант, кстати. Сигнатура будет содержать
> некий Reserved: Pointer.

Спасибо за поддержку ;)


Palladin   (2006-09-15 20:16:00) [23]


> [29] Doma ©

:)) Дык это не точка зрения, это реальность... И не ты первый, и не ты последний, кто сталкивается с необходимостью координального перепродумывания некоторого куска или иногда и целого фундамента проекта... потому и появляются, 2ые, 3тьи и XXXXные версии программных продуктов...


Palladin   (2006-09-15 20:13:00) [24]


> [27] Lamer@fools.ua ©

угу... твой AFAIR справедливый... это я упустил...


Doma   (2006-09-15 20:13:00) [25]

Спасибо, я понял вашу точку зрения... буду придумывать другие решение проблемы...


Lamer@fools.ua   (2006-09-15 20:13:00) [26]

>> Palladin ©   (15.09.06 20:09) [26]

Не такой уж и плохой вариант, кстати. Сигнатура будет содержать некий Reserved: Pointer.


Lamer@fools.ua   (2006-09-15 20:11:00) [27]

> при его вызове неявно передается, в параметрах самым первым, пресловутый Self

AFAIR, может быть и не первым. Зависит от соглашения о вызовах. По умолчанию, register => Self первым.


Palladin   (2006-09-15 20:09:00) [28]


> проблемма не решаема

хотя конечно вру... еще одно решение... просто беднягам которые будут писать тебе плюгины придется эмулировать вызов методов, что конечно ты должен заявить в документации по написанию плюгинов... :)


Джо   (2006-09-15 20:08:00) [29]

[24] Palladin ©
> разве что есть одно решение сравнивать содержимое стека
> с указателями на все созданные объекты в программе,

Еще учесть, что эти все "объекты" находятся в подгружаемых DLL (ибо "плагины") :)


Palladin   (2006-09-15 20:04:00) [30]


> спрашиваю помочь с решением конкретной проблемы

проблемма не решаема


> правильно я сделал или нет

Неправильно конечно... причем с самого начала... что такое метод - это та же процедура и отличается тем, что при его вызове неявно передается, в параметрах самым первым, пресловутый Self, и что тип объявления of object является записью TMethod, описаной в справке...

Как же ты сможешь по нетипизированному указателю на область памяти определить, что в ней находится и как оно вызовется?
разве что есть одно решение сравнивать содержимое стека с указателями на все созданные объекты в программе, и если найдешь, то метод, не найдешь - не метод... пойдет? :)


Джо   (2006-09-15 19:54:00) [31]

Еще раз. Исправить изначально непродуманную систему плагинов при помощи введения "костылей" — это возведения костыля в квадрат.
Свое мнение о технической реализации я уже высказал в [8].

Твой вариант в [10] только укрепил меня в мысли, что усовершенствованные костыли — это еще большее зло, чем неусовершенствованные. Уж позволь метафорически, я мог бы и резче, но нет мне нужды надрываться и что-то доказывать.

Нормальные решения выглядели бы так. Выкинуть всю эту систему и изначально сделать ее (если уж нужны были "методы") на COM. А теперь — поздно.


Ketmar   (2006-09-15 19:52:00) [32]

> [21] Doma   (15.09.06 19:46)
вьюноша, с подобным самомнением вам бы лучше книги писать. глядишь, второй Флёнов появится.
мы тут, знаете ли, привыкли учить думать. вот и вам во всей ветке намекали, что так -- не строят. зря, видимо, намекали... %-(


Doma   (2006-09-15 19:46:00) [33]

Что значит заведомо глупое техническое решение, я думаю об этом рано судить... Задача появилась потому, что плагины вызывают эту процедуру с параметром метод и параметры, все было замечательно пока не пришлось писать плагин на другом языке программирования, где понятия метод просто нет... вот я и думаю на решение проблемя, заодно решил и народ поспрашивать...
И опять же, я не спрашиваю совет, правильно я сделал или нет, спрашиваю помочь с решением конкретной проблемы...


Джо   (2006-09-15 19:43:00) [34]

> [19] Doma   (15.09.06 19:41)
> Задача поставлена. см Doma [1,2,7]...
> Если интересует задача более верхнего уровня, то это оч
> долго объяснять... могу тока сказать, что это все нужно
> для системы плагинов, которую я реализую.

Так значит, изменить свою "систему плагинов" ничего не мешает? Не базировать ее, так сказать, на заведомо глупых технических решениях.


Doma   (2006-09-15 19:41:00) [35]

Задача поставлена. см Doma [1,2,7]...
Если интересует задача более верхнего уровня, то это оч долго объяснять... могу тока сказать, что это все нужно для системы плагинов, которую я реализую.


Ketmar   (2006-09-15 19:40:00) [36]

> [17] Джо ©   (15.09.06 19:38)
не будет. это очевидно. нам же доставляет удовольствие корчить из себя гестаповцев. это, по-моему, всему рунету известно. правило есть такое неписаное: "пришёл на ДельфиМастер -- ни в коем случае не начинай вопрос с толкового описания проблемы. все знаю, что посетители форума ничем не занимаются и очень скучают. поэтому позволь им развлечься и в течение нескольких дней выяснять, что же именно имелось в виду, и чего охота добиться."


Джо   (2006-09-15 19:38:00) [37]

> Пока я тут прочитал тока размышления, некторорые даже не
> связаня с проблемой

Рановато пока судить об уровне других, не кажется?
Так задача будет поставлена или нет?


Ketmar   (2006-09-15 19:38:00) [38]

предланаю начать переход к практике с торжественной отсылки метлы на адрес корреспондента Doma. адрес в студию, если можно.


Doma   (2006-09-15 19:36:00) [39]

думаю в этом случае не може не упасть при вызове метода, т.к адресация происходит по разному...
Может перейдем от теории к практике? Пока я тут прочитал тока размышления, некторорые даже не связаня с проблемой (не будем показывать пальцем)...


Doma   (2006-09-15 19:35:00) [40]

думаю в этом случае не може не упасть при вызове метода, т.к адресация происходит по расному...
Может перейдем от теории к практики? Пока я тут прочитал тока размышления, некторорые даже не связаня с проблемой (не будем показывать пальцем)...


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо