Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2010, 12:07   #1
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
Вопрос Плагины через dll

Доброго времени суток !
Хотелось бы найти линк на статейку/исходник/ или просто внятное обьяснение.

Имеется файл настроек/скрипт в котором прописываются имена dll и вызываются функции из этих dll.
Код HTML:
load "parser.dll" 
Fparse "123.txt","123[ps].txt"
load "crypter.dll"
Fcrypt "123[ps].txt","123[ps][cr].txt","%PASSWORD%"
"Проблема" заключается в том что я естественно не смогу предусмотреть в моей программе все возможные плагины которые в будущем будут прицеплятся и соответственно пирограмма не будет знать какие плагины и с какими возможностями(функциями) будут.

Вот вопрос и состоит в том как загрузить (с HDD) плагин и расширить свой функционал функциями Myfunc1, Myfunc2, etc. дабы потом по скриптовому файлу можно было отпарсив вызвать эти самые функции с необходимым количеством аргументов верного типа.

Всем спасибо !
Lime вне форума Ответить с цитированием
Старый 17.06.2010, 12:36   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

так как Делфи не интерпретируемый,то встает проблемка, а как же передать параметры в функцию.
есть 2 варианта.
1)передавать все как строку(одна строка, постоянный параметр), тогда функция сама должна разбить это все(это не трудно в принципе).
2)передавать через стек(stdcall...в принципе если мастерство позволяет можно и любые вызовы юзать)с помощью ассемблера(ну тогда про некоторые Делфи типы надо забыть)

первый вариант у меня давно реализован
со вторым я решил так.
есть функция которая возвращает кол-во функций в dll
есть функция в dll которая возвращает для нужной функции(номер) структуру о ней(name,params(и так же тип вызова, но это личное)
ну а далее через асм вызываю
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.06.2010, 12:54   #3
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

А можно взглянуть на реализацию 1го варианта?
Разбить параметры не проблема , проблема обучить программу новым неизвестным доселе функциям из dll на лету(при выполнении скрипта) или хотябы при загрузке
Lime вне форума Ответить с цитированием
Старый 17.06.2010, 13:01   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

эмм..первый вариант на С++ написан+сейчас я не дома, дома скину, первый вариант то прост до безобразия(правда у меня ДЛЛ как интерпритатор, то есть извлекает имя функции из строки)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.06.2010, 13:23   #5
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
эмм..первый вариант на С++ написан+сейчас я не дома, дома скину, первый вариант то прост до безобразия(правда у меня ДЛЛ как интерпритатор, то есть извлекает имя функции из строки)
Со скриптовыми файлами по другому не получится. Парсить название функции в файле и получается интерпритировать)

Парсер аргументов внедрю в длл, мой вопрос собственно заключается в том как загрузив несколько dll вызвать их функции зная только их имена (спарсенные из файла) и передать им параметры (допустим все будет в 1ной строке).
Lime вне форума Ответить с цитированием
Старый 17.06.2010, 14:03   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

массив функций нужен(и их имен).
потом по имени функции находим её адрес в массиве
далее Func[i](str)(или нельзя массив функций делать?)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.06.2010, 16:40   #7
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
Лампочка

Собственно массив функций в pa.rar.
Но вот пример динамической загрузки dll и вызова функции у меня после выполнения вызывает ошибку (rt_dll.rar)
Я так понимаю с помощью GetProcAddress можно заполнить адреса процедур в массиве если изначально назначить все процедуры = тестовыми(одинаковыми) ?
Вложения
Тип файла: rar pa.rar (1.2 Кб, 7 просмотров)
Тип файла: rar rt_dll.rar (1.6 Кб, 7 просмотров)
Lime вне форума Ответить с цитированием
Старый 17.06.2010, 20:50   #8
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

В общем разобрался сам, хотя немного уклонился от темы , но на 1вый взгляд мне хватит арсенала для решения проблемы :D

+
Прилогаю исходники dll + loader )
Для проверки необходимо откомпилировать dll ,затем loader и проверить параметры по умолчанию (названия функций и имя dll)
В ComboBox можно выбрать функцию и проверить её нажав test
Вложения
Тип файла: rar example.rar (2.9 Кб, 27 просмотров)
Lime вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
управление ProgressBar-ом через dll Volkogriz Общие вопросы Delphi 4 15.04.2010 18:04
из Matlab'a в Delphi через dll Mikhail Bakurov Общие вопросы Delphi 7 03.12.2009 14:25
подсчет количества символов через dll a_n_n_a Помощь студентам 14 19.05.2009 10:16
DLL через Lib kiloruble Общие вопросы C/C++ 1 02.12.2008 22:58
Передача данных(массива) через DLL. acorables Общие вопросы Delphi 4 05.02.2007 13:16