procedure LogProcedure (const proc : TThreadMethod; str : string; const OwnerName : string=''; WriteValidResultMessege : boolean = false);
begin
WriteLog(str, OwnerName);
try
proc;
if WriteValidResultMessege then WriteLog(ValidResultMessege);
except
on e:Exception do begin
WriteLog(e.Message);
raise;
end;
end;
end;
procedure LogProcedure (const proc : TProcedure; str : string; const OwnerName : string=''; WriteValidResultMessege : boolean = false);
begin
WriteLog(str, OwnerName);
try
proc;
if WriteValidResultMessege then WriteLog(ValidResultMessege);
except
on e:Exception do begin
WriteLog(e.Message);
raise;
end;
end;
end;
указатель на метод с переменными параметрами
Подскажите, как можно сделать переменную-указатель на процедуры/методы с разным числом и/или типом параметров и соответственно вызывать их через эту переменную?
Или как альтернатива, как присвоить обычной переменной-указателю на процедуры/методы процедуру в процедуре (не помню точного названия) и соответственно вызывать их?
Сзаранее спасибо. :)
На самом деле, универсальный тип Pointer скушает все, но вот как потом с ним работать? В любом случае понадобится где-то хранить информацию по типам и количеству передаваемых параметров.
Про альтернативу - если я правильно понял, речь идет о вложенных процедурах - тут все еще веселее, поскольку кроме собственных параметров в стеке у них могут использоваться параметры из стека процедуры, где они объявлены.
Кстати, года два назад вроде была подобная темка, но там по-моему, так решение и не нашли.
Если не секрет, зачем тебе все это понадобилось? :)
Цитата: makbeth
Если не секрет, зачем тебе все это понадобилось? :)
Не секрет.:) Я пишу у себя модуль логирования...
Код:
Но так как логировать нужно разые процедуры и методы, то и получается нужно, чтоб я мог передать абстрактную процедуру/метод. Выходом могло быть создание вложений процедуры без параметров, но её как указатель передавать нельзя...:(. Вот и приходится в некоторых частях кода приложения вставлять напрямую тело приведённых процедур, что "не есть гуд".:(