PDA

Просмотр полной версии : Проблема с плагином


AltairAlentus
09.04.2012, 14:35
Я хочу переделать пару своих скриптов под плагины но конечно в программировании не очень силен, сделал простенький плагин чтоб разобраться он скомпилился но при использовании вылетает ошибка "invalid pointer operation"
вот код плагина
library plugin;

{$define RELEASE} // ??? ????????????? ? ??????? ?????????, ??? ?????? ????? ???????????????

uses

SysUtils,
Windows,
dialogs,
Classes,
strutils,
usharedstructs in 'usharedstructs.pas';

var
min_ver_a: array[0..3] of Byte = ( 3,5,23, 141 );
min_ver: LongWord absolute min_ver_a; // ??????????? ?????????????? ?????? ?????????
ps: TPluginStruct;
idt:integer;





function GetPluginInfo(const ver: LongWord): PChar; stdcall;
begin
if ver<min_ver then
Result:='???????????????? Plugin ? ????????? l2phx'+sLineBreak+
'??? ?????? 3.5.23.141+'+sLineBreak+
'? ??? ?????? ?????? ?????????! ?????? ?? ?????? ????????? ? ??? ????????!'
else
Result:='???????????????? Plugin ? ????????? l2phx'+sLineBreak+
'??? ?????? 3.5.23.141+'+sLineBreak+
'????????????? ?? ???????';
end;



function SetStruct(const struct: PPluginStruct): Boolean; stdcall;
begin
ps := struct^;
Result:=True;
end;


procedure OnLoad; stdcall;
begin

end;

procedure doskill(ids:integer);
var
buf:string;
begin
buf:=#$D0#$00#$57#$6F#$FF;
ps.writeh(buf,ids);
buf:=buf+#$01#$00;
ps.writed(buf,idt);
buf:=buf+#$18#$01#$A5#$A3#$00#$00;
ps.SendPacketStr(buf,0,True);


end;

procedure OnPacket(const cnt: integer; const fromServer: Boolean; const connectionname:string; var pck: string); stdcall;

begin
if not fromServer then
case pck[1] of
#$ce: idt:=ps.readD(pck,6);
#$b2: if ps.reads(pck,7)='.f1' then doskill(2002);
end;
end;



exports
GetPluginInfo,
OnPacket,
OnLoad,
SetStruct;

begin
end.

2670

goodvin1709
09.04.2012, 17:17
Да вроде нужно указать соединение.

AltairAlentus
09.04.2012, 20:32
Сделал так но ошибка таже
library plugin;

{$define RELEASE} // ??? ????????????? ? ??????? ?????????, ??? ?????? ????? ???????????????

uses
SysUtils,
Windows,
dialogs,
Classes,
strutils,
usharedstructs in 'usharedstructs.pas';

var
min_ver_a: array[0..3] of Byte = ( 3,5,23, 141 );
min_ver: LongWord absolute min_ver_a; // ??????????? ?????????????? ?????? ?????????
ps: TPluginStruct;
///ppck: string;
idt,id:integer;
//const ;
/// pause=15000;




function GetPluginInfo(const ver: LongWord): PChar; stdcall;
begin
if ver<min_ver then
Result:='???????????????? Plugin ? ????????? l2phx'+sLineBreak+
'??? ?????? 3.5.23.141+'+sLineBreak+
'? ??? ?????? ?????? ?????????! ?????? ?? ?????? ????????? ? ??? ????????!'
else
Result:='???????????????? Plugin ? ????????? l2phx'+sLineBreak+
'??? ?????? 3.5.23.141+'+sLineBreak+
'????????????? ?? ???????';
end;



function SetStruct(const struct: PPluginStruct): Boolean; stdcall;
begin
ps := struct^;
Result:=True;
end;


procedure OnLoad; stdcall;
begin

end;

procedure doskill(ids:integer);
var
buf:string;
begin
buf:=#$D0#$00#$57#$6F#$FF;
ps.writeh(buf,ids);
buf:=buf+#$01#$00;
ps.writed(buf,idt);
buf:=buf+#$18#$01#$A5#$A3#$00#$00;
ps.SendPacketStr(buf,id,True);


end;

procedure OnPacket(const cnt: integer; const fromServer: Boolean; const connectionname:string; var pck: string); stdcall;

begin
if not fromServer then
case pck[1] of
#$ce: idt:=ps.readD(pck,6);
#$b2: if ps.reads(pck,7)='.f1' then -при походе пакета ошибка
begin
id:=cnt;
doskill(2002);
end;
end;
end;



exports
GetPluginInfo,
OnPacket,
OnLoad,
SetStruct;

begin
end.
ошибка вылетает именно при обработке пакета b2

goodvin1709
10.04.2012, 10:15
begin
id:=cnt;
doskill(2002);
end;
Попробуй убрать посылку пакета,а сделать простое действие чтобы не отсылало пакет,например записать лог в стринг лист,а потом сохрани и так на каждое действие ищи ошибку,потом будет понятно где именно тупит плагин.

AltairAlentus
08.07.2012, 22:24
Снова после застоя взялся за плагины и столкнулся с тем что при любой команде read write вылетает ошибка.
http://s2.hostingkartinok.com/uploads/images/2012/07/dffec23515aed2b6e19ab3230e02f4d5.png (http://hostingkartinok.com)


думал где то в коде ступил все вырезал и оставил в онлоад запись и все равно ошибка
library plugin;
{$define ShareMM}
{$define AttemptToUseSharedMM}
{$define RELEASE}
uses
FastMM4 in '/fastmm/FastMM4.pas',
FastMM4Messages in '/fastmm/FastMM4Messages.pas',
usharedstructs in '/units/usharedstructs.pas',
SysUtils,
Windows,
dialogs,
Classes,
strutils;

var
min_ver_a: array[0..3] of Byte = ( 3,5,23, 141 );
min_ver: LongWord absolute min_ver_a;
ps: tPluginStruct;
cid: Integer;

function GetPluginInfo(const ver: LongWord): PChar; stdcall;
begin
if ver<min_ver then
Result:='Òåñòîâûé ïëàãèí'+sLineBreak+
'Âåðñèÿ íå êàòèò'
else
Result:='Òåñòîâûé ïëàãèí';
end;


function SetStruct(const struct: PPluginStruct): Boolean; stdcall;
begin
ps := struct^;
Result:=True;
end;

procedure OnLoad; stdcall;
var
buf: string;
begin
ps.WriteS(buf,'qqqqq');
end;

exports
OnLoad,
GetPluginInfo,
SetStruct;



begin
end.

Noise
11.07.2012, 12:00
Попробуй использовать др. версию l2phx у меня похожая проблема была, как версию поменял все сразу норм стало.

AltairAlentus
12.07.2012, 12:50
Взял старую версию та же история даже компилил с виртуалки на XP
Вопрос usharedstructs.pas надо брать с svn там все нормально сделано

Скопировал процедуру WriteS c uPluginData.pas в плагин все записывает норм ошибок нет.
походу проблема с tPluginStruct или fastmm