Показать сообщение отдельно
Старый 20.05.2010, 17:40   #1
Новичок
 
Аватар для Neutron
 
Регистрация: 04.03.2010
Сообщений: 2
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
Neutron пока неопределено
Подмигивание loadLibrary и CallFnc

Есть какие новости по использованию данной функции?
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;
---------------------------------------------------------------
Работает отлично

Последний раз редактировалось Neutron, 20.05.2010 в 17:40. Причина: Добавлено сообщение
Neutron вне форума   Ответить с цитированием