Вверх ↑
Администрация
Ответов: 15294
Рейтинг: 1518
#1: 2006-07-05 22:41:16 ЛС | профиль | цитата
Galkov, очевидность должна заключаться в том, что такой код:
_Data.data_type := data_xxx;
....
_Data.idata := X;

и такой:
CreateXxxData(_Data, X);[/code]
делает одно и тоже, но в первом случае разработчик компонента обязан знать в какие поля чего можно класть, а чего нельзя(ибо такой код распологает к тому, чтобы в data_type засунуть свой собственный тип, что мягко говоря может привести к печальным последствиям). В свою очередь автора пакета код в первом варианте [b]обязывает[/b] отныне и вовеки хранить тип данных в поле data_type, а значение целого типа в поле idata. Да, это конечно очень замечательно, что Delphi позволяет из структуры сделать объект, а из поля - вызов метода, но как только некий Вася написал у себя так:
procedure Test(var t:byte);
begin
Message(t);
end;

procedure onClick(_Data:Tdata; index:word);
begin
test(_Data.data_type);
end;
представленная выше модификация вызовет Error, из-за которого код компилироваться перестанет.

Я уже даже не говорю про того же Васю, который в случае применения указанной постом выше правки, поправив свой исходник таким образом:
procedure onClick(_Data:Tdata; index:word);
begin
new(_Data.ldata);
....
_Data.data_type := data_int;
end;
через пол часа мучений создаст на форуме тему "А почему у меня не выходит сделать MT поток?"


Собственно за примерами далеко ходить не надо: именно это сейчас и наблюдается в CGTShare.

Единственное правильное и надежное решение это потребовать от разработчика компонент для операций с типом TData использовать только стандартные ф-ции.
карма: 26
0