Сообщение Re[17]: .Net Core Вызов виртуальных методов нативных объекто от 18.11.2016 13:51
Изменено 18.11.2016 13:57 Serginio1
Здравствуйте, pilgrim_, Вы писали:
S>> Проблема в том, что ThisCall и stdcall не совместимы.
_>Внимательно смотри выделенное, stdcall (как и cdecl) — это C-стандарт соглашений о вызове, с одинаковой реализацией разными компиляторами,
_>тогда как thiscall — compiler specific — https://en.wikipedia.org/wiki/X86_calling_conventions#thiscall .
_>Тебя все еще интересует linux?
Да волнует. Но компилятор у меня будет один. Опять же я тебе давал ссылку на структуры применяемые в 1С.
Там используется виртуальные методы stdcall.
А вот как это в .Net использовать?
S>> Проблема в том, что ThisCall и stdcall не совместимы.
_>Внимательно смотри выделенное, stdcall (как и cdecl) — это C-стандарт соглашений о вызове, с одинаковой реализацией разными компиляторами,
_>тогда как thiscall — compiler specific — https://en.wikipedia.org/wiki/X86_calling_conventions#thiscall .
_>Тебя все еще интересует linux?
Да волнует. Но компилятор у меня будет один. Опять же я тебе давал ссылку на структуры применяемые в 1С.
Там используется виртуальные методы stdcall.
А вот как это в .Net использовать?
Re[17]: .Net Core Вызов виртуальных методов нативных объекто
Здравствуйте, pilgrim_, Вы писали:
S>> Проблема в том, что ThisCall и stdcall не совместимы.
_>Внимательно смотри выделенное, stdcall (как и cdecl) — это C-стандарт соглашений о вызове, с одинаковой реализацией разными компиляторами,
_>тогда как thiscall — compiler specific — https://en.wikipedia.org/wiki/X86_calling_conventions#thiscall .
_>Тебя все еще интересует linux?
Да волнует. Но компилятор у меня будет один. Опять же я тебе давал ссылку на структуры применяемые в 1С.
Там используется виртуальные методы stdcall.
А вот как это в .Net использовать?
Кстати объявив метод
У меня метод вызвался как ThisCall по stdcall
То есть первый параметр пошел в регисты. Сейчас проверю с несколькими параметрами
S>> Проблема в том, что ThisCall и stdcall не совместимы.
_>Внимательно смотри выделенное, stdcall (как и cdecl) — это C-стандарт соглашений о вызове, с одинаковой реализацией разными компиляторами,
_>тогда как thiscall — compiler specific — https://en.wikipedia.org/wiki/X86_calling_conventions#thiscall .
_>Тебя все еще интересует linux?
Да волнует. Но компилятор у меня будет один. Опять же я тебе давал ссылку на структуры применяемые в 1С.
Там используется виртуальные методы stdcall.
А вот как это в .Net использовать?
Кстати объявив метод
[UnmanagedFunctionPointer(CallingConvention.Winapi)]
internal delegate void ВиртуальныйМетодОбъектаСDelegate(IntPtr self, int Число);У меня метод вызвался как ThisCall по stdcall
public static void CallInterface(IntPtr cb)
{
var cb2 = Marshal.GetObjectForIUnknown(cb) as ICallback;
cb2?.execute(555);
// метод execute в VMT идет 4 (QueryInterface,Addref,Release)
// а индекс равен 3
var АдресМетода = ПолучитьАдресВиртуальногоМетода(cb,3);
// Получим делегат по дресу
var execute = Marshal.GetDelegateForFunctionPointer<ВиртуальныйМетодОбъектаСDelegate>(АдресМетода);
// И вызовем метод
execute(cb, 666);
}То есть первый параметр пошел в регисты. Сейчас проверю с несколькими параметрами