vmtSelfPtr

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Аватара пользователя
hinst
энтузиаст
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

vmtSelfPtr

Сообщение hinst »

Превед всм. Подскажите пожалуйста, где в Lazarus vmtSelfPtr (если такой есть вообще). Оч. спичит :roll:
Спасибо за внимание :roll: :roll: :roll:
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

hinst
1. Что за термин "превед"? Это Вы на каком языке тут всех обругали?
2. Что за термин "спичит"?
Без этих разъяснений понять, что Вы от нас хотите, будет совершенно невозможно.
Аватара пользователя
hinst
энтузиаст
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Сообщение hinst »

превед = привет
всм = всем
Оч. спичит = очень надобно
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

В Дельфи результат, возвращаемый ClassType, указывает "в середину" VMT, на первый виртуальный метод собственно объекта. Чтобы получить указатель на начало VMT, к нему нужно прибавить константу vmtSelfPtr (равную -76 в Delphi 7).
В FPC ClassType указывает на начало VMT, поэтому нужды в подобной константе нет. Чтобы получить указатель на первый виртуальный метод, можно прибавлять sizeof(TVmt).
Аватара пользователя
hinst
энтузиаст
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Сообщение hinst »

то есть, если написать
const vmtSelfPtr = sizeof(TVmt);
то компонент, бывший для дельфи, будет предположительно работать нормально??
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Не будет, потому что там, где в Дельфи добавлялся vmtSelfPtr, его добавлять не нужно, а там, где не добавлялся - наоборот, нужно.
Аватара пользователя
hinst
энтузиаст
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Сообщение hinst »

А как тогда?
const vmtSelfPtr = - sizeof(TVmt);
так покатит?
Ответить