Немного по ревизии 84.
во первых это АЛЬФА., со всемы вытекающими обстоятельствами.
очень много нового кода и большинство кусков которые брались из предыдущего ревижина переписаны,
соответственно может непредсказуемо выбить там где всегда было норм. и наоборот, там где выбивало пройти мягко.
багрепорты привествуються.
изменения в скриптинге.
UserTab,
showtab;
hidetab; заменены на
UserForm,
ShowForm;,
HideForm; соттветственно.
UserForm экземпляр Tform;
В плагины в SetStruct передается екземпляр следующего класса
Оффтоп
delphi Код:
TPluginStruct = class (tobject)
private
public
userFormHandle: THandle;
ConnectInfo : tConnectInfo;
function ReadC(const pck: string; const index:integer):byte; Virtual; Abstract;
function ReadH(const pck: string; const index:integer):word; Virtual; Abstract;
function ReadD(const pck: string; const index:integer):integer; Virtual; Abstract;
function ReadF(const pck: string; const index:integer):double; Virtual; Abstract;
function ReadS(const pck: string; const index:integer):string; Virtual; Abstract;
function ReadCEx(const pck; const index:integer):byte; Virtual; Abstract;
function ReadHEx(const pck; const index:integer):word; Virtual; Abstract;
function ReadDEx(const pck; const index:integer):integer; Virtual; Abstract;
function ReadFEx(const pck; const index:integer):double; Virtual; Abstract;
function ReadSEx(const pck; const index:integer):string; Virtual; Abstract;
procedure WriteC(var pck: string; const v:byte; ind:integer=-1); Virtual; Abstract;
procedure WriteH(var pck: string; const v:word; ind:integer=-1); Virtual; Abstract;
procedure WriteD(var pck: string; const v:integer; ind:integer=-1); Virtual; Abstract;
procedure WriteF(var pck: string; const v:double; ind:integer=-1); Virtual; Abstract;
procedure WriteS(var pck: string; const v:string; ind:integer=-1); Virtual; Abstract;
procedure WriteCEx(var pck; const v:byte; ind:integer=-1); Virtual; Abstract;
procedure WriteHEx(var pck; const v:word; ind:integer=-1); Virtual; Abstract;
procedure WriteDEx(var pck; const v:integer; ind:integer=-1); Virtual; Abstract;
procedure WriteFEx(var pck; const v:double; ind:integer=-1); Virtual; Abstract;
procedure WriteSEx(var pck; const v:string; ind:integer=-1); Virtual; Abstract;
function CreateAndRunTimerThread(const interval, usrParam: Cardinal;
const OnTimerProc: TOnTimer): Pointer; Virtual; Abstract;
procedure ChangeTimerThread(const timer: Pointer; const interval: Cardinal;
const usrParam: Cardinal = $ffffffff;
const OnTimerProc: TOnTimer = nil); Virtual; Abstract;
procedure DestroyTimerThread(var timer: Pointer); Virtual; Abstract;
function StringToHex(str1,Separator:String):String; Virtual; Abstract;
function HexToString(Hex:String):String; Virtual; Abstract;
function DataPckToStrPck(var pck): string; Virtual; Abstract;
procedure SendPacketData(var pck; const tid: integer; const ToServer: Boolean); Virtual; Abstract;
procedure SendPacketStr(pck: string; const tid: integer; const ToServer: Boolean); Virtual; Abstract;
procedure SendPacket(Size: Word; pck: string; tid: integer; ToServer: Boolean); Virtual; Abstract;
function getConnectionName(id : integer):string; Virtual; Abstract;
function getConnectioidByName(name : string):integer; Virtual; Abstract;
Function GoFirstConnection:boolean; Virtual; Abstract;
Function GoNextConnection:boolean; Virtual; Abstract;
procedure ShowUserForm(ActivateOnly:boolean); Virtual; Abstract;
Procedure HideUserForm; Virtual; Abstract;
end;
думаю труда разобратся не составит.
сама SetStruct должна выглядеть приблизительно так:
function SetStruct(const struct: PPluginStruct): Boolean; stdcall;
begin
ps := TPluginStruct(struct^);
Result:=True;
end;
TPacket в OnNewPacket:
Оффтоп
delphi Код:
TCharArray = array[0..$FFFF] of AnsiChar;
TPacket = packed record case Integer of
0: (Size: Word;
Data: array[0..$FFFD] of Byte);
1: (PacketAsByteArray: array[0..$FFFF] of Byte);
2: (PacketAsCharArray: TCharArray);
3: (pckSize: Word;
pckId: Byte;
pckData: array[$FFFC] of Byte);
end;
перебор ВСЕХ имеющихся соединений происходит приблизительно вот так
Оффтоп
(вырезка из старого демо)
delphi Код:
with ps do
if GoFirstConnection then
repeat
cntHP := ConnectInfo.ConnectID;
Say('Для выбора нужного соединения наберите в чате слово set и отправьте');
until GoNextConnection;
в общем можно просто глянуть демо в PluginCodding\
Структуры в units\usharedstructs.pas
при использовании LSP прописывать ПОЛНЫЙ путь к длл.
попытайтесь исключить пробелы в пути и русские буквы.
лучше кинуть на c:\ саму длл.
сам лсп модуль в тестовом режиме.