Должен признать, что я выпил пару бутылок пива, просто для испытания :) Вам нужны магические байты. Согласно легенде, объекты старого стиля создают пространство для указателей, только если вы используете ЛЮБЫЕ виртуальные методы. Нет Виртуальных методов НЕТ VMT.
Указатель VMT ВСЕГДА ПЕРВЫЙ с новыми объектами стиля, потому что все они объявляют виртуальные методы. Кажется, кто-то забыл, что со старыми объектами стиля VMT может прийти позже. так что, предполагая, что это всего лишь один указатель, это заставляет его работать на моем D2009. Я не в духе компилятора, парень по имени Дэйв Джуэлл, который раньше писал для PC pro, мог бы подтвердить, что это будет стабильно ...
Type
PObject1 = ^TObject1;
TObject1 = Object
Magic: Array[0..3] of Byte; //or integer or whatever I was playing with the size
FCount : Integer;
Constructor Init;
Procedure Add; virtual;
Procedure Deduct; virtual;
end;
Type
PObject2 = ^TObject2;
TObject2 = Object(TObject1)
Constructor Init;
end;
Тогда после строительства эти работы:
.
.
.
Object2^.Add;
Object2^.Deduct;
и я получаю соответствующий вывод на консоль
Я добавил дополнительный процесс, чтобы убедиться, что он работает на 2 виртуальных компьютерах:)
Между прочим, они работают независимо от того, поставили ли вы ^ или нет, 2009 знает, что вы имеете в виду: (
Отсутствие правильного исправления из embracodeland Вам все еще может потребоваться изменить определение каждого BASE-объекта. Надеюсь, вы могли бы сделать это с помощью поиска и вставки / замены или Grep ... Удачи.