![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
я не ~
Пользователь
Регистрация: 19.09.2008
Сообщений: 58
|
![]()
вобщем использую интерпретатор, мне нужно из скрипта вызывать функции из длл, причем любой длл. Тут у меня проблема с реализацией, из за того что нужно всегда иметь прототипы этих фий. Вобщем не хотелось бы писать все возможные прототипы. Можеть кто то сталкивался с такой проблемой? как можно вызвать денамически импортированную ф-ию без прототипа? Можеть есть способ? можеть ассемблерный код поможет - типо стек?
|
![]() |
![]() |
![]() |
#2 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
![]()
загружай динамически DLL и вызывай функцию через ассемблерные вставки.
кстати, я тоже пишу небольшой скриптовый движок, собираюсь сделать так чтобы все прототипы функций были одинаковыми. Как вариант: у всех функций два параметра. Первый параметр задаёт количество параметров, а второй это указатель на массив параметров. |
![]() |
![]() |
![]() |
#3 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
![]()
Грузин - интересно, надо будет и себя в этой сфере попробовать
![]() А по делу, ведь каждая функция это просто адресс в памяти. Т.е. push вызывите с указаниями параметров а потом call и адрес этой функции. Порядок подачи параметров в стек зависит от дериктив например в винде принято Stdcall. т.е. справо на лево если смотреть как наобычную функцию. (если память не подводит). Пробуйте. ![]() |
![]() |
![]() |
![]() |
#4 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
![]()
обычно у всех нормальных DLL функции вызываются по соглашению stdcall.
[OFFTOP] всмысле? |
![]() |
![]() |
![]() |
#5 | |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
![]()
Ну
Цитата:
![]() |
|
![]() |
![]() |
![]() |
#6 | ||
я не ~
Пользователь
Регистрация: 19.09.2008
Сообщений: 58
|
![]() Цитата:
Цитата:
Последний раз редактировалось user_jasser; 31.03.2009 в 02:24. |
||
![]() |
![]() |
![]() |
#7 |
somewhere else
Участник клуба
Регистрация: 17.07.2008
Сообщений: 1,409
|
![]()
А каким образом компилятор добавляет настоящий адрес функции? или он ставит RVA в таблице экспорта, а подгрузчик сам загружает по этом адресу настоящий адрес функции?
"Тяжело в учении, легко в бою" - А.В. Суворов
|
![]() |
![]() |
![]() |
#8 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
![]()
у программы есть таблица импорта, обычно находится за секцией с данными. И в ней есть обычная таблица адресов на импортируемые функции. В программе происходит так
Код:
Код:
Последний раз редактировалось rpy3uH; 31.03.2009 в 08:28. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
выгрузка длл | user_jasser | Win Api | 6 | 10.03.2009 14:09 |
ДЛЛ на gcс | Иллидан | Общие вопросы C/C++ | 1 | 12.10.2008 22:11 |
Ещё вопрос о длл... | Altera | Общие вопросы Delphi | 6 | 16.05.2008 06:51 |
Фрэймы из ДЛЛ | SunKnight | Общие вопросы Delphi | 4 | 06.01.2008 16:32 |
Использование длл | Anatolij | Win Api | 1 | 02.01.2007 19:54 |