Здравствуйте, rm822, Вы писали:
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();
}