Да без проблем. Указатель на объект есть, фактически, указатель на указатель на таблицу виртуальных функций, которая, в свою очередь, есть массив указателей на виртуальные методы...фуух...главное, не запутаться в указателях А так - получай и подменяй, сколько влезет.
Спорите вы тут... Все от конкретной реализации зависит. Вот к примеру прога на делфи и прога на си с QT: Файл qbutton.h Q_OBJECT Q_ENUMS( ToggleType ToggleState ) Q_PROPERTY( QString text READ text WRITE setText ) Q_PROPERTY( QPixmap pixmap READ pixmap WRITE setPixmap ) Q_PROPERTY( QKeySequence accel READ accel WRITE setAccel ) Q_PROPERTY( bool toggleButton READ isToggleButton ) Q_PROPERTY( ToggleType toggleType READ toggleType ) Q_PROPERTY( bool down READ isDown WRITE setDown DESIGNABLE false ) Ниче не напоминает? Это на C++ Так что все в руках кодера. Только мне кажется что этот топик есть "Про языки программирования: Episode II "?
Ursus Я бы не сказал. выход часто плотнее мсвс, просто ключиков надо больше указывать, одного -os недостаточно. Очень мощные прагмы. Линкер - однозначно мощнее. кроме того опенсорс с бсд лицензией + кросс. + тулзов всяких. например конвертер С-h --> asm-inc. А интел - комковый + только на х86.
Heineken да че понимать. народу башню сорвало. Берите дельфу - пробуете глядеть сорсы, учить - нравится - ваше. Берете С (МСВС) - пробуете глядеть сорсы, учить - нравится - ваше. очень рекомендую также http://www.inr.ac.ru/~info21/ http://oberoncore.ru/
Ursus Это понятно, а смещение на нужный метод как получить ? В дельфях есть асм-директива VMTOFFSET, а в сях как ? PS: Спрашиваю не для прикола, а для общего развития
Интересно так... Если бы вопрос "Что учить" задали на форуме: форум Java : Ответ - Учите Java, она популярна; форум C/C++ : Ответ - Учите C/C++ - ибо свобода; форум Delphi : Ответ - сами знаете какой; форум WASM: Ответ - Нее, низачто не угадаете... аж на 14 страниц расписали; ДЕФОЛТ: Забудьте все, что вам тут сказали и что писали вы. Посмотрите направо и чуть чуть вверх, подумайте о языках программирования. Вам придет в голову тот язык, который вам надо изучить в первую очередь.
Указатели на методы идут тупо в том порядке, в каком они идут в объявлении класса. Т.е. в массиве первый указатель (по смещению 0) - это первый виртуальный метод класса, дальше - второй по смещению 4 и т.д. Виртуальные методы дочерних классов добавляются в конец таблицы.
Ребятки, надо постараться и обогнать тему в WASM.HEAP "Улыбнитесь! " с ее 93 страницами. Думаю нам это под силу.
Ursus Спасибо за информацию Но, например, в VCL все контролы наследуются от TObject по нехилой цепочке и в итоге имеют не один десяток виртуальных методов, наверняка и в MFC тоже. Что теперь прикажешь рыться в справках\сорцах и ручками подсчитывать кол-во виртуальных методов ?! Проще уж поиск известного указателя замутить, правда его сначала еще получить нужно через одно место - видимо это и есть "неограниченные возможности" ?! PS: К сожалению, без прикола не обошлось Все же не исключено, что какие-то скрытые возможности в сях есть для всех этих штучек с указателями, просто мс и ко не спешат о них докладывать простым смертным. А в дельфях на мой взгляд справочная инфа более "демократичная", информативная и полезная, хотя до некоторых штучек все равно приходится методом тыка доходить
мне был интересен сплайсинг метода, который импортируется из длл, соответственно указатель на него должен получаться не анализом таблицы методов, а напрямую из таблицы импорта. впрочем у С(++) всегда были проблемы с импортом.
beginner Ну, если Вам лично глубоко плевать на защиту от ошибок с помощью типизации -- дело Ваше. Без аналогичного определения для & и | -- бесполезная вещь, потому что ошибки как могли появляться, так и могут. Насчёт начала изучения Си на Студии соглашусь. Правда, хелп отнюдь не отличный -- дерьмо дерьмом. Правда, у Борландовских продуктов ещё хуже, потому и используем MSDN. Ну а действительно нормальной документации на Винду не существует, похоже (разве что в виде закрытых мануалов у самих мелкомягких). Heineken Будет желание и настойчивость -- когда-нибудь поймёшь _basmp_ И на IA-64, он же Итаниум.
На асме ты сам выбираешь между mul/imul, jl/jb, mov/movzx, byte_ptr/word_ptr/dword_ptr и т.п. Поэтому на асме не может быть никакой типизации. А на ЯВУ приходится компилятору "объяcнять" как ему следует понимать написанный тобою код. Объясняешь ты ему при помощи типов данных.
beginner На то он и асм. Его задача -- как раз давать полный доступ ко всему. А ЯВУ -- всё ж нечто иное.