Re[38]: MS забило на дотнет. Питону - да, сишарпу - нет?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 30.08.21 18:50
Оценка:
Здравствуйте, vdimas, Вы писали:



V>И да, сейчас получить указатель непосредственным образом можно только на статические методы.

V>Ниже в сырцах можно подсмотреть, как получить указатель на экземплярный метод и как вызывать затем.

Нет не надо.

Кроссплатформенное использование классов .Net из неуправляемого кода. Или аналог IDispatch на Linux
CEF, ES6, Angular 2, TypeScript использование классов .Net Core. Создание кроссплатформенного GUI для .Net с помощью CEF
CEF, Angular 2 использование событий классов .Net Core
1. Хранилище для объектов .Net. Мы не можем передать ссылку на объект .Net так как объекты .Net подвергаются дефрагментации. Плюс нужно держать ссылку на них, для предотваращения их от сборки мусора; (Можно и GCHandle применить, но это излишняя нагрузка на GC)

Хранилище в итоге представляет массив элементов

List<ЭлементХранилища> Элементы= new List<ЭлементХранилища>();
int FirstDeleted = -1;

public struct ЭлементХранилища
    {
        internal AutoWrap Объект;
        internal int Next;
}


Next нужен для для удаленных элементов. Некий простейший менеджер памяти.

Кстати вызов из натива можно напрямую через https://docs.microsoft.com/ru-ru/dotnet/core/tutorials/netcore-hosting

Предпочтительный способ для размещения среды выполнения .NET Core в .NET Core 3.0 и более поздних версиях — это библиотеки API nethost и hostfxr. Эти точки входа решают все сложности по поиску и настройке среды выполнения для инициализации, а также поддерживают как запуск управляемого приложения, так и вызов статического управляемого метода.


А что касается упрощения вызовов можно через Source Generator нагенерить методов типа

static T WrapClassMethod(int i,param1,param2,...)
и солнце б утром не вставало, когда бы не было меня
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.