Наверное,все присутствующие здесь знают,что к элементу структуры(C++,чистый,без clr и прочих) ,возможен "черезжопный" доступ в виде *(hstruc+sizeof(fieldN_type)). Собственно, вопрос:возможен ли подобный доступ к МЕТОДАМ структуры?если да,то насколько сложно реализуемо на плюсах/асме?
6opoDuJIo Это зависит от компилятора. Если говорить про MS cl, то он обычно помещает адрес таблицы методов в первый член объекта, т.е. обычно вызов первого метода выглядит вот так: mov eax, [ecx] call dword [eax] второго, соответственно: mov eax, [ecx] call dword [eax + 0x4] Но никто не может дать гарантий, закладываться на это нельзя. Если речь идет об известном коде, то лучше посмотреть в дизассемблере как там и что. В общем случае ничего не определено.
м...вот оно что,ну спасибо а нету ли каких-либо функций,которые бы позволили получить адрес таблицы методов при наличии ссылки на экземпляр класса?чтобы не завязыватся на компилятор
1) Через таблицу vtable вызываются только виртуальные методы, а не-виртуальные - как обычные функции по фиксированному адресу\смещению, определеному на этапе компиляции\линковки 2) Сишными стандартами способ вызова виртуальных ф-й никак не регламентирован и соотв-но в стандарте даже нет упоминания о vtable (если только вскользь в примечании), не говоря уже о каких-то функциях для получения ее адреса. Поэтому в общем случае "все зависит от компилятора". Однако если компилятор предусматривает возможность реализации COM-интерфейсов через абстрактные классы, то из соображений совместимости указатель на vtable должен быть первым членом класса и сама vtable должна содержать указатели на виртуальные методы в порядке их объявления (разумеется это справедливо, когда в базовом классе объявлен хотя бы один виртуальный метод). 3) "Чтобы не завязыватся на компилятор" нужно еще и стандартную конвенцию вызова виртуальных методов явно указывать (stdcall или cdecl). Иначе компилятор может использовать свой нестандартный вызов по умолчанию, например, в MS VC _thiscall с передачей this через регистр ecx
можете еще при создании, в описателе сделать табличку нужных вам методов. макросами или еще чем, но с вызовами гемор будет точно, даже если прилепиться к компилятору. впрочем, и тут можно придумать ход. вопрос только стоит ли эта игра свечь?
В общем то задача состояла в том,чтобы обращатся к методу по его номеру,ну и в довесок,с массивом параметров.а с макросами идея кстати.