Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.01;
Скачать: CL | DM;

Вниз

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

 
ZZ   (2002-05-01 17:53) [0]

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

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


 
Mystic ©   (2002-05-01 18:05) [1]

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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2002.07.01;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.009 c
1-1048
admin_serg
2002-06-18 18:08
2002.07.01
Печать текстового файла


3-916
Abu
2002-06-05 16:12
2002.07.01
Ошибка если в look-up-поле


3-856
Oleg_EM
2002-06-04 09:41
2002.07.01
Как вернуть несколько значений из процедуры/функции в ?


1-945
besen-ok
2002-06-19 17:05
2002.07.01
Емуляция нажаться клавиши при ратоте с MS TErminal Сервер


14-1146
Soldat
2002-05-28 10:16
2002.07.01
нужен ключик к дельфям 5.0