Сообщение Re[2]: .Net Core Вызов виртуальных методов нативных объектов от 12.11.2016 21:02
Изменено 13.11.2016 6:23 Serginio1
Здравствуйте, rm822, Вы писали:
R>Короткий ответ — нет.
R>Ты и в обычном .net их толком не вызовешь без type library или IDispatch потому что
R>а) для вирт. метода нужно знать индекс в таблице вируальных функций
Ну так описывая класс виртуальными методами мы и описываем VMT
По сути это ничем не отличается от IUnknown
R>б) этих таблиц может быть несколько, и надо знать индекс таблицы
Это как? Интерфейсы и множественное наследование не рассматриваем. Только VMT. При этом на С++ нет проблем их использовать.
R>в) данные базового класса могут иметь смещение и его тоже нужно знать
Данные не интересуют. Интересуют только объект первым полем является ссылка на VMT.
И описание этой VMT на C#. И почему это не сделать для совместимости в .Net Core c нативным кодом?
R>Короткий ответ — нет.
R>Ты и в обычном .net их толком не вызовешь без type library или IDispatch потому что
R>а) для вирт. метода нужно знать индекс в таблице вируальных функций
Ну так описывая класс виртуальными методами мы и описываем VMT
По сути это ничем не отличается от IUnknown
R>б) этих таблиц может быть несколько, и надо знать индекс таблицы
Это как? Интерфейсы и множественное наследование не рассматриваем. Только VMT. При этом на С++ нет проблем их использовать.
R>в) данные базового класса могут иметь смещение и его тоже нужно знать
Данные не интересуют. Интересуют только объект первым полем является ссылка на VMT.
И описание этой VMT на C#. И почему это не сделать для совместимости в .Net Core c нативным кодом?
Re[2]: .Net Core Вызов виртуальных методов нативных объектов
Здравствуйте, rm822, Вы писали:
R>Короткий ответ — нет.
R>Ты и в обычном .net их толком не вызовешь без type library или IDispatch потому что
R>а) для вирт. метода нужно знать индекс в таблице вируальных функций
Ну так описывая класс виртуальными методами мы и описываем VMT
По сути это ничем не отличается от IUnknown
R>б) этих таблиц может быть несколько, и надо знать индекс таблицы
Это как? Интерфейсы и множественное наследование не рассматриваем. Только VMT. При этом на С++ нет проблем их использовать.
R>в) данные базового класса могут иметь смещение и его тоже нужно знать
Данные не интересуют. Интересуют только объект первым полем является ссылка на VMT.
И описание этой VMT на C#. И почему это не сделать для совместимости в .Net Core c нативным кодом?
А контракт можно прописать как то так
R>Короткий ответ — нет.
R>Ты и в обычном .net их толком не вызовешь без type library или IDispatch потому что
R>а) для вирт. метода нужно знать индекс в таблице вируальных функций
Ну так описывая класс виртуальными методами мы и описываем VMT
По сути это ничем не отличается от IUnknown
R>б) этих таблиц может быть несколько, и надо знать индекс таблицы
Это как? Интерфейсы и множественное наследование не рассматриваем. Только VMT. При этом на С++ нет проблем их использовать.
R>в) данные базового класса могут иметь смещение и его тоже нужно знать
Данные не интересуют. Интересуют только объект первым полем является ссылка на VMT.
И описание этой VMT на C#. И почему это не сделать для совместимости в .Net Core c нативным кодом?
А контракт можно прописать как то так
[InterfaceType(NativeInterfaceType.VMT)]
interface ICallback
{
void execute();
}