PDA

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


Noise
16.06.2012, 18:37
Доброго времени суток, вот выдалось свободное время и меня снова посещают мысли о написание плагина для l2phx (первый опыт бы не совсем удачный я о нем писал тут (http://coderx.ru/showthread.php?t=9532)), но все равно вернулся и попытался разобраться:

l2phx вылетает с критом проблема в процедуре OnPacket притом изучив множество тем на форуме я понял, что эта процедура у всех разная О_о тем не менее скопировал вариант:


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


connectionname:string;

Выделенное красным в образце (в этой теме (http://coderx.ru/showthread.php?t=890)) не было.

После этого свершилось чудо, l2phx перестал критовать при попытке залогиниться. Но появилась новая проблема, пх видит что пакета пришли но pck.pckId всегда содержит разные значения, т.е. пх не понимает какой именно пакет приходит!!! После еще 3х часового поиска по форуму и попыток подобрать рабочий вариант процедуры обнаружил следующее:


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

var pck: String

Пи изменении типа pсk стал опозновать пакеты (pсk[1]) более того я смог почитать значение чата, но после того как читаю пакет, или пытаюсь его убрать из отправки на сервер (pck.Size := 0; или pck := '';) пх опять критует...


В общем прощу помочь разобраться что именно не так и почему.

Цель гениально простая надо смотреть все пакета чата от клиента (#$38) и записывать из в текстовый файл!
Ну и что бы при этом l2phx не критовал :)))

Весь используемый мной исходный код в этой теме (http://coderx.ru/showthread.php?t=9532), единственное изменение это параметры метода OnPacket (оно указанно выше (красным выделены изменения))

supernewbie
16.06.2012, 19:58
Noise, попробуй юзать общий менеджер памяти (FastMM)

Noise
16.06.2012, 20:36
Что значит попробуй юзать? т.е. то что он в юнитах числится этого мало?


uses
FastMM4 in 'fastmm\FastMM4.pas',
FastMM4Messages in 'fastmm\FastMM4Messages.pas',
variants,
usharedstructs in 'units\usharedstructs.pas',
Controls,
Forms,
Dialogs,
sysutils,
Classes;


И без него вообще разве подключается плагин к пх?

supernewbie
16.06.2012, 21:14
Noise, достаточно. подключается.
помню я убивал пакет так))
PCardinal(Cardinal(pck)-4)^:=0;
в XE2 при таком выкрутасе утечки нет, в фастмме пх - хз

Добавлено через 7 минут
после того как читаю пакет
читалось нормально у меня, какая делфи у тебя?

Noise
16.06.2012, 21:44
У меня D7. Да не проблема не в том что бы убить, даже если не убивать, а просто посмотреть, что в я отправил, то оно все равно критует...
т.е. даже если сделать так:



if not FromServer then and (pck[1] = #$38) then
showmessage(ps.ReadS(pck, 2)); // еще пробовал pck[2]


То оно выводит содержание чата, но после этого пх критует.

supernewbie
16.06.2012, 22:20
Noise, так, сорцы в студию

Noise
16.06.2012, 22:28
http://coderx.ru/showpost.php?p=182904&postcount=11


и то что внутри OnPacket:

if not FromServer then and (pck[1] = #$38) then
showmessage(ps.ReadS(pck, 2)); // еще пробовал pck[2]



Так что оно у тебя точно есть :)

supernewbie
16.06.2012, 22:53
Noise, исправь
ps:PPluginStruct;
и ps:=struct;

хотя попробуй, мало ли что)

Добавлено через 12 минут
можешь ещё попробовать OnCallMethod заюзать

Добавлено через 8 минут
у меня работает плагин

только в нем ид пакета 49 а не 38

PS пх - 3.5.28.151

Noise
16.06.2012, 23:51
Блин я не имею возможности протестировать, у меня только интерлюд клиент...
а в нем say2 это 38, а H5 у меня нету :(

Покажи плиз содержимое OnPacket ну и usharedstructs тот что у тебя скинь плиз
а еще лучше все сразу, просто очень хочу понять в чем именно у меня косяк возникает!

supernewbie
16.06.2012, 23:52
Noise, держи

Noise
17.06.2012, 00:08
Хыыыы [Fatal Error] SoundPlugin.dpr(11): File not found: 'ExceptionLog.dcu'
Убрал ExceptionLog из uses скомпил, все повторяется т.е. сообщени отображает но сразу после того как в showmessage нажимаю OK идет крит :(

Добавлено через 44 секунды
могу через teamviewer показать, потому как я уже хз в чем там может быть дело :(