Вверх ↑
Ответов: 4622
Рейтинг: 746
#1: 2014-04-30 22:34:46 ЛС | профиль | цитата
1) Не могу ничего сказать по поводу способа использования представленных компонентов
2) Моё предложение в share.pas касается и существующих и будущих компонентов
3) Конкретная разница. Существующий в THIChangeFileSecurity._work_doSetFileSecurity код:


#pas
procedure THIChangeFileSecurity._work_doSetFileSecurity;
var SecDescr: PSecurityDescriptor;
fn:string;
dt:TData; // <<====
begin
dt := ReadData(_Data,_data_PSD,nil); // <<====
fn := ReadString(_Data, _data_Filename, _prop_FileName);
SecDescr := PSecurityDescriptor(ToObject(dt)); // <<====
if _IsObject(dt,PSD_GUID) then // <<====
begin
if not SetFileSecurity(PChar(fn), OWNER_SECURITY_INFORMATION or DACL_SECURITY_INFORMATION, SecDescr) then
_hi_onEvent(_event_onError);
end;
_hi_onEvent(_event_onSetFileSecurity);
end;
После моих изменений:


#pas
procedure THIChangeFileSecurity._work_doSetFileSecurity;
var SecDescr: PSecurityDescriptor;
fn:string;
begin
SecDescr := PSecurityDescriptor(ReadObject(_Data,_data_PSD,PSD_GUID));
fn := ReadString(_Data, _data_Filename, _prop_FileName);
if SecDescr <> nil then
begin
if not SetFileSecurity(PChar(fn), OWNER_SECURITY_INFORMATION or DACL_SECURITY_INFORMATION, SecDescr) then
_hi_onEvent(_event_onError);
end;
_hi_onEvent(_event_onSetFileSecurity);
end;
- не нужно заводить отдельно переменную для TData, читать в неё, проверять её на тип объекта, читать объект. В моем варианте сразу читается объект и проверяется на nil. Уменьшение "индусятины" номер раз.
- этот прием универсальный для всех компонентов и каждому автору не придется изменять share.pas под себя. Уменьшение "индусятины" номер два.
- я добавил привычные для остальных типов функции чтения данных и выдачи событий. Не вижу тут никакого усложнения.
карма: 26

0