PDA

Просмотр полной версии : Передача указателя на процедуру в DLL


lexayar
12.03.2009, 20:44
Подскажите плиз, как можно в подключенную к скрипту dll передать параметром указатель на процедуру (функцию).
Никак не получается выполнить ее внутри DLL, такое ощущение что dll в другом адресном пространстве загружается:(

Добавлено через 8 минут
Пробую так:
script:
var
lib: integer;

procedure Init; //Вызывается при включении скрипта
begin
lib := loadLibrary('dll\Utils\Utils.dll');
try
CallFunction(lib,'PacketProcess',1,[@test]);
finally
FreeLibrary(lib);
end;
end;

procedure test;
begin
showmessage('Test message');
end;

dll:
type
TScriptProc = procedure;

procedure PacketProcess(PScriptProc: Pointer); stdcall;
var
ScriptProc: TScriptProc;
begin
ScriptProc := TScriptProc(PScriptProc);
ScriptProc;
end;

QaK
12.03.2009, 22:19
lexayar, тебе оно зачем? для каких целей?

lexayar
12.03.2009, 23:30
Да пробовал в dll передать функции ReadD,ReadH....WriteD и т.д. для обработки пакета, а они никак не хотят:)
А вообще хочу всю основную функциональность в DLL вынести, такую как Статы персонажа, инвентарь и т.д. Чтоб при написании нового макроса не надо было этой ерундой заниматься.

QaK
13.03.2009, 08:21
lexayar, стукни в аську, или в ПМ.

Ezhik
19.05.2009, 16:14
Подскажите плиз, как можно в подключенную к скрипту dll передать параметром указатель на процедуру (функцию).

Я вотъ тоже дошел до этого момента, когда мне стало это интересно: как вызвать процедуру из моей ДЛЛ, которая описана в скрипте. Подозреваю, что никак:) Собстно обратной связи нет. (кроме результата)
Я так думаю, что можно в ДЛЛ организовать виртуальный стек: какаето структура ожидаемых для выполнения процедур или функций. И функцией возвращать этот стек с уже расчитаными параметрами в скрипт. Это пока идея, но сразу отчетливо видны ряд недостатков:
1) теряется многопотоковость;
2) нет мгновенного реагирования;
Чтобы реагирование было максимально быстрым придется задать таймеру малый интервал, что подгрузит впринципе систему
и др.

Есть какието соображения или советы на это счет?;)

Хочу подчеркнуть: я не прошу готовый результат, а лишь ваши соображения и идеи

PanAm
22.05.2009, 13:11
мб. просто в DLL-плагин добавить FS и запускать скрипты из плагина? :p

alexteam
22.05.2009, 13:41
проще написать оконный обработчик для формы и использовать sendmessage из длл в хендл окна создаваемого скриптом для передачи данных.
во всяком случае будет работать.