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

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

Вызов неизвестной заранее функции


ZZ ©   (2002-05-01 17:53:00) 

Подскажите как можно вызвать некоторую функцию из DLL.
Название и список параметров вводит пользователь во время выполнения программы.
Например, пользователь вводит mydll.func(12,"test"); и программа вызвает функцию func из mydll.dll с указанными параметрами.

До ввода этой строчки об этой функции ничего не известно.
Последствия вызова (не те параметры, нет такой Dll/функции в ней) - проблема пользователя.
Не использовать внешние проги (RunDLL и т.д.)


ZZ   (2002-05-01 19:12:00) [1]

Используется stdcall.
Поэкспериментировал - с константами,более менее понятно, а как с переменными? (не могу понять закономерности)
Если просто переменная, то выше push mov eax,[ebp-$04]
если var параметр, то lea,[ebp-$33] ? Откуда эти $04 брать?


Mystic   (2002-05-01 18:05:00) [2]

1. GetProcAddress возвращает адрес указанной функции. Если таковой нет, то nil.

2. Динамически формируешь код для вызова. Одной информации о списке передаваемых параметров мало --- надо еще знать способ передачи (stdcall, pascal, ...). Этот код состоит из последовательности команд PUSH, после которой идет команда CALL и потом, [необязательное в некоторых способах] восстановление стека. Тут лучше поэксперементировать, как сам комилятор Delphi вызывает другие функции и написать по образу и подобию.


Наверх

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