Если собрались использовать
array of TCommandStackElement, то надо так
PCommandStackElmt = ^TCommandStackElmt; - выкинуть.
Код:
TCommandStack = class (TObject)
private
PCommandStack: TCommandStackElmt;//<<==-- здесь так
Created: Boolean; //проверка на "созданность"
FSize: Cardinal; //под сколько элементов уже выделено памяти
FCount: Cardinal; //количество занятых элементов
вместо
Код:
ReallocMem(PCommandStack,(FSize)*SizeOf(TCommandStackElement));
надо
Код:
SetLength(PCommandStack,FSize);
Убрать
^ при обращении к PCommandStack.
и что Вы хотели сделать здесь
Код:
PCommandStack[Self.FCount].@Command:=@ICommand;
и особенно здесь
Код:
PCommandStack[Self.FCount].Command:=TCommand.create;
// сначала записываем в поле указатель на только что созданный класс
PCommandStack[Self.FCount].Command:=ICommand;
// а затем затираем его
Если Вы вот этим кодом
@Command:=@ICommand; хотите побайтно скопировать содержимое объекта TCommand - то хочу разочаровать - ничего не выйдет.
И немножко ликбеза.
Экземпляры классов в дельфи - всегда указатели.
Копирующего конструктора и
поэлементного присваивания по умолчанию для классов
НЕТ !. Если они нужны - нужно делать самому. Для некоторых классов копирование содержимого имеется(например TStringList, TBitmap), но у этих классов есть метод Assign, в котором прописано - что и как копируется/присваивается.
Удачи.