Собственно вот в чем вопрос:
возможно ли запускать с помощью какой то функции или команды из L2PacketHack другие экзешники
скажем я поставил скрипт бота на ночь а ночью бот ступил и сдох и в целях экономии электроэнергии мне хочется запустить экзешник который вырубает комп :)
или другой случай: в L2PacketHack конечно скрипты шустро пашут но если в скрипте больше 1000 строк и куча циклов то начинает несколько подтормаживать вот чтоб не загружать по уши работой L2PacketHack почему бы не написать на С++ или делфи екзешник для выполнения всех расчётов и всех циклов
в общем возможно ли это? если да то примерчик скриптика скиньте полиз :)
__________________
На людей сердишся, когда чувсивуешь, что их поступки важны. Ничего подобного я больше не чувствую...
//samplescript.txt
var
lib:Integer;
procedure Init;
begin
lib:=loadLibrary('sample.dll');
end;
procedure Free;
begin
FreeLibrary(lib);
end;
begin
if FromClient then
begin
CallFunction(lib,'FromClient',1,[pck]);
end;
end.
спасибо за пример rateg
но чёт в dll MessageBox(0,L"medved",L"preved",0); не пашет
я скрипт запускаю и ничего не происходит
а я так понял должно сообщение выскочить "medved preved" с кнопкой ок
ну это не так важно на самом деле
скажите а можно передать из dll файла переменные в L2PacketHack
к примеру есть такой код
в С++
Код:
//sample.c
#define UNICODE
#include <windows.h>
#define DLL_EXPORT __declspec(dllexport) __stdcall
int DLL_EXPORT FromClient(int i)
{
int dda=133;
return 56;
}
int DLL_EXPORT APIENTRY DllMain (int i )
{
i=i+123;
return 34;
}
а в L2PacketHack
Код:
//samplescript.txt
var
Res:variant; lib:Integer; timer1:TTimer;
procedure Init;
begin
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer;
timer1.enabled:=true;
timer1.interval:=1000;
lib:=loadLibrary('Project62.dll');
end;
procedure Free;
begin
FreeLibrary(lib);
timer1.Free;
end;
procedure OnTimer(Sender: TObject);
begin
Res:=CallFunction(lib,'DllMain',1,[2]);
ShowMessage('!'+VarToStr(Res)+'!');
end;
begin
end.
эти два кода не к чему не ведут :(
переменные не передаются из dll
как передать при вызове dll значение переменной dda из dll в L2PacketHack ???
Добавлено спустя 23 часа 18 минут 16 секунд:
ну народ помогите плиз !!!
я не верю что здесь никто ничего не знает о подключении dll файлов :(
__________________
На людей сердишся, когда чувсивуешь, что их поступки важны. Ничего подобного я больше не чувствую...
Merdek 16 ноя 2007, 11:10
Проблема использования DLL написанной в Delphi.
Скомпелированная DLL лежит в той же папке, что и PacketHack 1.3.8
При вызове "CallFunction" вылетает ошибка "Invalid Argument".
Подскажите что не так...
Код:
Код DLL-ки в Delphi
library DLL;
uses
SysUtils,Classes;
function Str1(b:integer): string;
stdcall;
begin
if b=0 then
result := '1!'
else
result := '2!';
end;
exports
Str1 index 1 name 'op';
begin
end.
Код:
Код скрипта
var
lib, lib1:Integer;
Res:variant;
ar:array of variant;
str1: string;
procedure Init;
begin
str1:='0';
lib := loadLibrary('User32.dll');
lib1 := loadLibrary('DLL.dll');
Res:= CallFunction(lib1,'op',1,[0]);
str1:=Res;
Res := CallFunction(lib,'MessageBoxW',4,[nil,str1,'text2',0]);
FreeLibrary(lib);
FreeLibrary(lib1);
end;
begin
end;
dmitry501 16 ноя 2007, 12:24
Это кто тебя учил использовать дельфийские стринги без sharemem?
Почитай, что пишет Делфи, когда создаешь пустую dll
а лучше используй array of char с ручным управление памятью, как в классическом С.
Посмотри, как используются системные .dll, сначала подготавливаются буфера, а потом вызываются dll, причем передаются указатели на буфер.
Br1nk 11 дек 2007, 12:00
Если твоя строка будет меньше 256 символов, ты можешь вместо string использовать shortstring, не изменяя более ничего в программе.
function Str1(b:integer): shortstring;
Код:
//by Angel
Да дело не в сложности, а в удобо читаемости и в скорости работы.
dll не так уж сложно привязать (подгрузить к процесу).
пример привязки dll от xkor
Код:
var
lib,Lib1:Integer;
Res:variant;
ar:array of variant;
begin
lib := loadLibrary('User32.dll'); <--- -- привязка dll
|
lib1 := loadLibrary('GDI32.dll'); <---
Res := CallFunction(lib,'MessageBoxW',4,[nil,'Text1','text2',0]);
Res := CallFunction(lib,'GetDC',1,[0]);
CallFunction(lib1,'LineTo',3,[Res,100,100]);
CallFunction(lib,'ReleaseDC',2,[0,Res]);
FreeLibrary(lib);
FreeLibrary(lib1);
end.
главно dll нармально сделать, с нормальными названиями функций, процедур и тд
скопировал из system32 в директорию пакет хака 2 файла User32.dll и GDI32.dll
написал код в пакет хаке
Код:
var
lib,Lib1:Integer;
Res:variant;
ar:array of variant;
procedure Init;
begin
lib := loadLibrary('User32.dll');
lib1 := loadLibrary('GDI32.dll');
Res := CallFunction(lib,'MessageBoxW',4,[nil,'Text1','text2',0]);
Res := CallFunction(lib,'GetDC',1,[0]);
ShowMessage('!'+VarToStr(Res)+'!');
CallFunction(lib1,'LineTo',3,[Res,100,100]);
CallFunction(lib,'ReleaseDC',2,[0,Res]);
FreeLibrary(lib);
FreeLibrary(lib1);
end;
begin
end.
и все заработало
потом пытаюсь подключить какую то из своих dll и ничего не происходит :(((
можете исходный код на с++ работающего dll показать
который можно к пакет хаку подключить ?
тут с++ программеры есть ?
Добавлено спустя 11 минут 50 секунд:
Re: Запуск dll или exe из L2PacketHack
можете хотябы на делфи пример длл показать
вот я к примеру пишу такой код в делфи
Код:
library DLL;
uses
SysUtils,Classes;
function Str1: integer; stdcall;
begin
result := 2;
end;
exports
Str1 index 1;
begin
end.
а в пакет хаке такой
Код:
var
lib,Lib1:Integer;
Res:variant;
ar:array of variant;
procedure Init;
begin
lib := loadLibrary('Project2.dll');
Res := CallFunction(lib1,'Str1',1,[0]);
ShowMessage('!'+VarToStr(Res)+'!');
FreeLibrary(lib);
end;
begin
end.
мне все равно от длл приходит пустота :((
что не так то делаю ???
__________________
На людей сердишся, когда чувсивуешь, что их поступки важны. Ничего подобного я больше не чувствую...
{ Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }
я конечно не силён в техническом английском и тем более в делфи но мне кажется модуль ShareMem необходим, чтобы экспортировать длинные строки
а я пытаюсь экспортировать integer тоесть числа :(
строки кстати пытался с этим модулем экспортировать получил ту же пустоту :(
единственная длл которая у меня заработала это
Код:
library FIRSTDLL;
uses ShareMem, Dialogs, Classes, SysUtils, Windows;
begin
ShowMessage ('Initialization Code Called');
end
табличка выскакивает а переменные не передаются и не экспортируются :((((((((
HELP!!!!!!!!!!!!
Добавлено спустя 1 день 1 час 19 минут 42 секунды:
люди ну я внатуре себе уже мозги поломал над этой фигнёй :( мож поможете?
я прост хочу сделать надстройку к пакет хаку тоесть написать длл который будет связан с экзешником написанном на делфях который будет очень похож на валкера
ну в общем хочу сделать вариант ин гейм бота но без знания как связать длл с пакет хаком ничё не выйдет :((
__________________
На людей сердишся, когда чувсивуешь, что их поступки важны. Ничего подобного я больше не чувствую...
А в пакетхаке судя по всему не работает нормально вызов DLL.
Проверил твою DLL в WP PPC - вызов из скриптов там работает нормально, а вот в пакетхаке нет.