PDA

Просмотр полной версии : loadLibrary и CallFnc


Neutron
20.05.2010, 17:40
Есть какие новости по использованию данной функции?
CallFnc(LibHandle:integer;FunctionName:String;Coun t:Integ er;Params:array of variant):String

Или как передавать из DLL строковые параметры.
Способ который используется в Бот DLL (передача по 1 букве в виде индекса в массиве) не расматриваю, так как это связанно с повышенной нагрузкой скрипта. И лагами в игре. Хотя и он имеет право на жизнь.

Мне нужно передавать именно строки целиком. Что снизит нагрузку на скрипт.
У кого либо получилось передавать строки, ктоме как в цифромом виде?
Если да то пожалуйста можно посмотреть на исходник DLL и кусок скрипта в котором это дело происходит.
Использую L2phx 3.5.33.164

Добавлено через 5 часов 39 минут
Не у кого проблем значит нет?
После копания в исходниках и по просторам Интернета передача строк получилась!
В исходниках функция описана следующим образом:
TestFunc: function (ar:array of PChar):Pchar;stdcall;

Отсюда вытекает что и в DLL она должна быть описана аналогично.

В DLL создаем функцию такого вида:
---------------------------------------------------------------
function getr(ar:array of PChar):Pchar;stdcall; {<- только так}
begin
Result :=PAnsiChar(StrPas(Param[0]) +StrPas('Старт 1234567890 ASRTP Конец')); // Результат будет: первый паремерт переданный в функцию + строковая константа
end;
exports getr;
---------------------------------------------------------------
В скрипте:
---------------------------------------------------------------
var
S :string;
begin
lib:=loadLibrary('D:\Temp\test1.dll');
S := CallFnc(lib, 'getr',1,[i]);
SendMessage_Client('Result = '+S);
FreeLibrary(lib);
end;
---------------------------------------------------------------
Работает отлично :friends:

QaK
20.05.2010, 19:15
Neutron, вообще все тобой описанное - первые попытки подружить пакетхак с дллками, до 83й версии пакетхака имелась возможность использовать плагины, после, ввиду действия непреодолимой силы, плугины, как они есть, поломались, но, если написать свою процедурку для считывания данных, которую добавит плугин, то, по-прежнему можно юзать плагины, хотя, никто, кроме меня, их толком и не счупал, кажется ..