Здравствуйте, Serginio1, Вы писали:
S>Попробовал с VMT
S>Определил методы
Вот ты неуемный

ты бы для начала проверил, работает ли COM-интероп на linux — ведь это же твоя цель?
И если работает — тему можно закрывать, COM-интеропа тебе хватит за глаза.
Или ты заради любви к искусству?
S>S> [UnmanagedFunctionPointer(CallingConvention.Winapi)]
S> internal delegate void ВиртуальныйМетодОбъектаСDelegate(IntPtr self, int Число);
S> [UnmanagedFunctionPointer(CallingConvention.ThisCall)]
S> internal delegate void ВиртуальныйМетодОбъекта2Delegate(IntPtr self, int Число1, int Число2);
S>
CallingConvention.Winapi — тот же stdcall
CallingConvention.ThisCall — зачем тебе это?
S> Создал функцию для получения адреса метода
S>S> public static IntPtr ПолучитьАдресВиртуальногоМетода(IntPtr Объект, int ИндексВТаблицеВиртуальныхМетодов )
S> {
S> int размерIntPtr = Marshal.SizeOf<IntPtr>();
S> // Первым полем объекта идет ссылка на VMT
S> // Прочитаем её
S> var АдресVMT = Marshal.ReadIntPtr(Объект);
S> // получим адресс метода по смещению в VMT
S> var АдресМетодаVMT = АдресVMT + ИндексВТаблицеВиртуальныхМетодов * размерIntPtr;
S> var АдресМетода = Marshal.ReadIntPtr(АдресМетодаVMT);
S> return АдресМетода;
S> }
S>Для интерфеса вроде работает
Я вот
тутАвтор: pilgrim_
Дата: 22.06.16
тебе намекал, а ты сделал вид что понял

весь хардкор с Marshal.ReadIntPtr за тебя сделает рантайм.
S> параметры поменяны местами, а переданное первым параметром значение не соотвествует переданному.
Используй stdcall как в native коде, так и в делегате на C#, и все будет норм.