Форум работает в тестовом режиме. Все данные были перенесены со старого сайта 2018 года. Некоторая информация может быть недоступна, например вложения или хайды. Просьба сообщать о данных случаях через функционал "Жалоба", прямо под постом, где отсуствуют данные из хайда или проблемы с вложением.
Могут быть проблемы в "выкидыванием" с форума (слетевшей авторизацией). Нужно собрать статистику таких случаев.
Есть Тема, куда можете сообщить о проблемах с сайтом либо просто передать привет.

GetVar и SetVar

Рег
2 Мар 2016
Сообщения
234
Реакции
0
Есть нужные мне скрипты, но крянутый адрик ругается на GetVar и SetVar, как исправить? Может быть функцию в код дописать? Я нашел, но немогу ее правильно под адрик переписать. Или может заменить можно другими комадами?
Код:
function getvar(varname:string):string;
external 'Kernel32.lib';          - это я уже добавил
{$IFDEF LINUX}
 begin
  result:=getenv(PChar(varname));
 end;
{$ELSE}
 var
  buffer:array[0..1024] of char;
  size:integer;
 begin
  size:=GetEnvironmentVariable(PChar(varname),buffer,sizeof(buffer));
  if size=0 then getvar:='' else getvar:=String(buffer);
 end;
{$ENDIF}
 
ну перестаньте плез :DDD
 
Нет.
Хотя бы примерно так

uses Classes;

type
TVar = class
Obj: TL2Object;
Value: Cardinal;
end;
TVarKeeper = class
private
_payload: TList;
function Index(forObject: TL2Object): Integer;
procedure Remove(obj: TL2Object);
public
constructor Create;
destructor Destroy; override;
procedure SetVar(value: Cardinal; forObject: TL2Object);
function GetVar(forObject: TL2Object): Cardinal;
procedure ClearInvalidObjects();
end;

constructor TVarKeeper.Create;
begin
inherited Create();
_payload:= TList.Create();
end;

destructor TVarKeeper.Destroy();
begin
_payload.Free;
end;

procedure TVarKeeper.SetVar;
var
var_: TVar;
begin
var_:= TVar.Create();
var_.Obj:= forObject;
var_.Value:= value;
_payload.Add(var_);
end;

function TVarKeeper.Index();
var
i: Cardinal;
var_: TVar;
begin
result:= -1;
for i:= 0 to _payload.Count - 1 do
begin
var_:= TVar(_payload);
if (var_.Obj = forObject) and var_.Obj.Valid then
result:= i;
end;
end;

procedure TVarKeeper.Remove;
var
i: Integer;
var_: TVar;
begin
i:= Index(obj);
if i <> - 1 then
begin
var_:= TVar(_payload);
_payload.Delete(i);
var_.Free();
end;
end;

function TVarKeeper.GetVar;
var
i: Integer;
begin
result:= 0;
i:= Index(forObject);
if i <> - 1 then
result:= TVar(_payload).Value;
end;

procedure TVarKeeper.ClearInvalidObjects();
var
i: Cardinal;
var_: TVar;
begin
for i:= 0 to _payload.Count - 1 do
begin
var_:= TVar(_payload);
if (var_ = nil) or not var_.Obj.Valid then
begin
_payload.Delete(i);
var_.Free();
end;
end;
end;

Не проверял, но вроде должно работать.
 
Назад
Сверху