в том то и дело что в пакет хаке работает вызов длл !:(
вызов функций из виндузовых длл таких как User32.dll и GDI32.dll проходит на ура и эти функции возвращают в пакет переменные!
а я просто не могу правильно составить длл чтоб переменные передавались :(
скорее всего многоуважаемый создатель пакет хака может как то меня просветить по этому вопросу
__________________
На людей сердишся, когда чувсивуешь, что их поступки важны. Ничего подобного я больше не чувствую...
как передать при вызове dll значение переменной dda из dll в L2PacketHack ???
Очень легко используй обычные функции вместо процедур и при ее описании укажи тип возвращаемого значения и лови это значение на выходе в L2ph.
Цитата:
мне все равно от длл приходит пустота :((
что не так то делаю ???
Я честно давно не писал уже DLL, попробуй отладь в делфи, может у тя сама DLL не пашет? Если компилируется, еще не значит, что с ней все ок, для того чтоб откомпилировать DLL, надо написать прогу, которая ее использует. Если не знаешь как делать, то почитай в поисковик те быстро выдаст статейки.
еще попробуй убери в uses все модули, все равно ты там ничего из них не используешь и проверь еще раз.
Вообще, я сам собираюсь написать DLL в которую из l2ph будут просто передаваться пакеты от клиента и сервака, а там уже будут процедурки для анализа пакетов и т.д. (т.е. там я помещу как раз весь тот код, который хочу реализовать), а обратно l2ph будет получать на выходе модифицированный пакет и отправлять. Кто подскажет можно мне как нить сделать так, чтоб я мог из DLL отправлять пакеты какие-то серваку или клиенту? Если так напрямую нельзя, то подскажите как реализовать оп другому, вообщем нужно сделать так, чтобы я мог когда мне нужно отослать пакеты клиенту или серваку, но весь исполняемый код будет в DLL, т.к. DLL намного быстрее выполняется, чем скрипт в l2ph, да и возможностей побольше предоставляет :)
Правильная передача параметров в DLL в пакетхаке не работает.
Механизм работы с DLL был тупо передран с форума http://fast-report.com/ru/forum/index.p ... topic=3593
и никто не собирается его модифицировать или хотя бы разобраться.
В это способе все очень криво и не совсем правильно сделано и работает только частично.
хех ладно.. я в ЛС написал xkor по поводу dll, надеюсь он ответит..
если нормально dll не пашут в пакетхаке придётся все свои скрипты под WP PPC перегонять :(
а жаль... в пакет хаке в 100 раз проще всё
кстати кто нидь может дать ссылку на темку про WP PPC где описывается как простейшие FS скрипты писать?
__________________
На людей сердишся, когда чувсивуешь, что их поступки важны. Ничего подобного я больше не чувствую...
В архиве с прогой есть папка doc, там найдёшь документацию самого автора, описано как ее подключить и описание методов написание скриптов.
Вообще, если тут не работает нормально подключение сторонней dll, то придётся отложить свою идею о написание dll, в которой будет производится все вычисления и модификации с пакетами :(
Надеюсь автор программы обратит на сей факт свое внимание и раскажет подробно как правильно следует подключать dll, иначе придётся искать альтернативные варианты.
действительно те длл которые я пытался запустить в пакетхаке прекрасно работают в WP PPC
а я так с ними мучился... :(
но меня все же удивляет и поражает что виндузовые библиотеки User32.dll и GDI32.dll все же пашут в пакет хаке :shock: :shock:
значит если как то все же изловчиться можно подобную библиотеку под пакетхак написать
жалко что исходники этих библиотек недостанеш нигде :(
может у кого то все же есть какие то дллки с исходным кодом которые в пакет хаке пашут?
__________________
На людей сердишся, когда чувсивуешь, что их поступки важны. Ничего подобного я больше не чувствую...
skymanrus, у меня есть исходники, где в DLL создаётся форма, есть внешняя функция, которая создаёт и показывает модальное окно, по окончанию работы с ней форма разрушается.
Так же научился передавать строковые типа и никакой модуль ShareMem не нужен)) Единственное, что ща не могу реализовать, так это создание немодального окна, ибо модальное окно стопорит процесс передачи пакетом в том скрипте, где она вызвалась и пока не завершишь работу с ней пакеты не проходят, я в частности делал так: при написание какого-либо сообщения в клиенте, я подгружал DLL и вызывал функцию, все норм, а после выгружал. Но мля, модальное окно не катит, нужен механизм немодального, я нашел его, но там требуется 2 параметра, которые я не могу в скрипте узнать: Application.Hadle основной программы (l2ph) и CallForm.Handle, в этом вся запара, попробую написать xkor может поможет, вообще я знаю уже способ, но он требует поправки исходного кода программы))
Вообще мог бы и сам наверно поправить, тока Delphi я щас юзаю 7 и компоненты не ставил таких как JEDI, на счет версии Delphi я мож и не прав :)
Код скрипта:
Код:
var
MyLib:Integer;
Res:Variant;
ar:array of variant;
begin
//38 - пакет когда вы пишите что нить в чат, не важно что и в какой, тут проверяется тока тип пакета )
if FromClient and (pck[1]=#$38) and (MyLib=0) then begin
MyLib := LoadLibrary('D:\Программы\l2phx318\MyLib\MyLib.dll'); //Здесь укажи свой путь до DLL
if (MyLib = 0) then ShowMessage('Не удалось загрузить библиотеку!')
else Res := CallFunction(MyLib,'ShowFormInDLL',1,['Мое окошко, че хочу, то и делаю с ним ^^']);
ShowMessage('Окошко должно было появится, а это сообщение выводится после того как вы его закрыли');
end;
if FromClient and (pck[1]=#$38) and (MyLib<>0) then
begin
ShowMessage('Попытка выгрузить библиотеку');
FreeLibrary(MyLib);
ShowMessage('Библиотека должна была выгрузится');
end;
end.
Код самой Dll:
Код:
library MyLib;
uses
ShareMem,
SysUtils,
Classes,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
exports
ShowFormInDLL;
begin
end.
Код Unit1, в котором описана форма, этот модуль подключён к основной DLL в разделе uses:
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
function ShowFormInDLL(Name: PWideChar): TModalResult; stdcall;
implementation
{$R *.dfm}
function PWideToString(pw: PWideChar): string;
var
p: PChar;
iLen: integer;
begin
iLen := lstrlenw(pw) + 1;
GetMem(p, iLen);
WideCharToMultiByte(CP_ACP, 0, pw, iLen, p, iLen * 2, nil, nil);
Result := p;
FreeMem(p, iLen);
end;
function StringToPWide(sStr: string; var iNewSize: integer): PWideChar;
var
pw: PWideChar;
iSize: integer;
begin
iSize := Length(sStr) + 1;
iNewSize := iSize * 2;
pw := AllocMem(iNewSize);
MultiByteToWideChar(CP_ACP, 0, PChar(sStr), iSize, pw, iNewSize);
Result := pw;
end;
function ShowFormInDLL(Name: PWideChar): TModalResult; stdcall;
begin
Form1 := TForm1.Create(Application);
Result := Form1.ShowModal;
Form1.Free;
end;
end.
Я этот код в самом начале писал, т.к. щас парюсь с показом немодульного окна, поэтому исходники скопировал сюда и тут ручками поправлял и не проверял, так что возможны какие-то опечатки или мелкие недочеты, если не пашет напишите, посмотрю исправлю, я делал у меня работало. :)
DLL руль и необходимое ее правильно подключить и взаимодействовать,т.к. скриптовая машина она конечно хороша, но не тягаться с языками программирования ей еще рано. :)