托管.net核心并创建托管实例

时间:2020-01-31 04:42:10

标签: .net-core interop unmanaged managed coreclr

我试图在本机应用程序中加载.net核心库,以创建托管对象的实例

我已按照Microsoft的建议使用hostfxr加载.netcore 3+库

使用NativeHost.vs / DotNetLib示例,我已经能够调用本地静态方法。

我想创建一个托管对象并在其上调用方法,理想情况下是创建一个类型库,以便我可以处理应用程序本机部分与托管部分之间的互操作。

这是我们使用完整的.net框架的方式,但似乎与

没有任何相似之处

mscoree.CLRCreateInstance

使用hostfxr。

仅建议在<.net core 3.0

中使用CoreClrHost

我想念什么吗?

1 个答案:

答案 0 :(得分:0)

在这个阶段我无法做的事情。 .net核心没有“嵌入API”

根据Vitek Karas的评论,https://github.com/dotnet/runtime/issues/3676

load_assembly_and_get_function_pointer并不意味着 替代低级的所谓“嵌入” API- 让您使用本地代码中的托管对象/方法 通用方式。它旨在提供一种可靠的方式来初始化 运行时并获得一种调用托管代码的方法。

我们希望人们使用此功能来制作单个(或 很少)调用托管代码,或在顶部构建自己的“互操作”。 允许创建指向任何对象的本机函数指针的问题 方法是,如果该方法的签名不是非常简单,则存在 无法自定义封送处理。例如,如果该方法将 使用字符串参数,将无法指定哪个 编码应公开给本机代码...等等。

“嵌入API”将允许本机代码具有更大的功能 控制与托管的沟通是我们的职责 考虑未来。

我们确实考虑过直接暴露coreclr托管(从新 功能),但会在生命周期中产生一些非同寻常的问题 管理。而且,向前迈进确实很棘手 如果运行时实际上是Mono,则采用一致的方式。