Хостинг. net ядро ​​и создание управляемых экземпляров - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь загрузить базовую библиотеку. net в собственном приложении с намерением создать экземпляр управляемого объекта

Я следовал рекомендации Microsoft использовать hostfxr для загрузки. Библиотека netcore 3+

Используя пример NativeHost.vs / DotNetLib, я смог вызвать собственный метод stati c.

Я хотел бы создать управляемый объект и вызвать методы, в идеале создавая библиотеку типов, чтобы я мог обрабатывать взаимодействие между нативной и управляемой частями приложения.

Это был способ, которым мы сделали это с полной. net структурой, но это не так не похоже на какой-либо аналог

mscoree.CLRCreateInstance

с hostfxr.

Использование CoreClrHost рекомендуется только для <. net core 3.0 </p>

Я что-то упустил?

1 Ответ

0 голосов
/ 03 февраля 2020

То, что я пытаюсь сделать, на данном этапе невозможно. Не существует «API встраивания» для. net core

Согласно комментарию Vitek Karas здесь https://github.com/dotnet/runtime/issues/3676

Load_assembly_and_get_function_pointer не предназначен для замена низкоуровневого так называемого API встраивания, который позволит вам работать с управляемыми объектами / методами из нативного кода обобщенным образом c. Он предназначен для обеспечения надежного способа инициализации среды выполнения и получения вызова в управляемом коде.

Мы ожидаем, что люди будут использовать эту функциональность либо для одного (или нескольких) вызовов управляемого кода, либо построить собственное «взаимодействие» сверху. Проблема с созданием указателя на собственную функцию для любого метода заключается в том, что если сигнатура метода не является сверхпростой, то нет способа настроить маршалинг. Например, если метод будет принимать строковый аргумент, не будет никакого способа указать, какая кодировка должна быть представлена ​​нативному коду ... и т. Д.

«API встраивания», который допускает нативный код в будущем мы планируем иметь гораздо больший контроль над связью с управляемыми.

Мы действительно рассматривали возможность предоставления хостинга coreclr напрямую (из-за новой функциональности), но это создает некоторые нетривиальные проблемы с временем жизни. управление. А также в будущем было бы действительно сложно сделать это согласованным образом, если среда выполнения на самом деле Mono.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...