Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Узнать количество параметров процедуры/функции, зная только укзатель на нее... 
:(
    Опции темы
lukas
Дата 19.11.2007, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



Вообщем задача такая, зная только укатель (Pointer) на функцию/процедуру или метод узнать (хотябы) количество параметров... 

ну что-то типо этого....

Код

// про эту процедуру мы как бы ничего не знаем кроме указателя

procedure Shop(S:String; V:Integer);
begin
....
end;

...
Var
  Count:Integer;
  P:Pointer;
begin
P:=@Shop;
Count:=GetProcParamCount(P); // это выдуманная функция
ShowMessage('Кол-во параметров процедуры : '+Count+' шт.');
end;



--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
Alexeis
Дата 19.11.2007, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



  По моему, такое возможно только для Activex/COM.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
lukas
Дата 19.11.2007, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



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


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
Alexeis
Дата 19.11.2007, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(lukas @  19.11.2007,  21:35 Найти цитируемый пост)
ну почему же... как работает Pascal Script

  Так он же в себе сорцы хранит, а экзешник нет. Описание параметров есть в тлбшках, сборках дотнета.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
lukas
Дата 19.11.2007, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



так а по подробнее об этом...  smile ну или ссылку на документацию...

Добавлено через 6 минут и 37 секунд
к тому же я не представляю как хранить функции и процедуры с разными типами параметров и с разным их количеством... чтобы их еще при этом можно было вызывать...


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
EvilsInterrupt
Дата 20.11.2007, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 3
Всего: 9



lukas, 
Все куда проще ;)
Когда ты пишешь код, то уже на стадии компиляции известно, сколько будет аргументов в конкретном месте кода!

Даже при этом:
if a= b then
// вызовем Функ1 с двумя аргументами
else вызовем Функ1 с одним аргументом

Даже в этом случае компиллеру известно, сколько аргументов надо в конкретном месте, а раз знает, то и вставляет такой код, где
передается в стек столько параметров сколько надо и переходит работать по указанному адресу, опять же он знает скоко аргументов,
значит знает где нужная ф-ция лежит!

Но когда дело касается классов и виртуальных, динамических методов. А также автоматных интерфейсов в технологии COM, тут немного по сложнее. Тут вычисляется адрес нужного метода и происходит вызов.

Вывод, кол-во параметров можно узнать, только если изучить схему вызова, т.е. как все дело передается в стек. За одно будешь знать соглашение о вызове. ;)

ЗЫ:
ИМХО, я могу ошибаться, особо наверу не принимайте, а лучше перепроверьте

PM MAIL WWW ICQ Jabber   Вверх
lukas
Дата 20.11.2007, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



ну вообщем... как в Паскаль скрипте мы добавляем функции и процедуры... что то типа этого...


Код

....
AddFunction('Function GetSome(S:String; I:Integer):Real;', @GetSome);



EvilsInterrupt, 

так я понимаю что кол-во параметров вычисляется компилятором... но как обратиться к функции (допустим)... 

нужно придумать какой-то универсальный процедурный тип... только как?... хз.


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
Alexeis
Дата 20.11.2007, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



lukas, сильно смахивает на паттерн "стратегия". Мож не мучиться и сделать как полагается при помощи ООП.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
lukas
Дата 20.11.2007, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



Да и в правду... наверно игра не стоит свеч... если найду способ отпишусь... 


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0481 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.