![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Методы и процедуры [D7, WinXP]
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]думаю в этом случае не може не упасть при вызове метода, т.к адресация происходит по расному...
Может перейдем от теории к практики? Пока я тут прочитал тока размышления, некторорые даже не связаня с проблемой (не будем показывать пальцем)...