【问题标题】:Hosting .net core and creating managed instances托管 .net 核心并创建托管实例
【发布时间】:2020-05-16 18:33:29
【问题描述】:

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

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

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

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

这是我们使用完整的 .net 框架的方式,但似乎没有任何类似物

mscoree.CLRCreateInstance

使用 hostfxr。

仅推荐 <.net core> 使用 CoreClrHost

我错过了什么吗?

【问题讨论】:

    标签: .net-core interop unmanaged managed coreclr


    【解决方案1】:

    我正在尝试做的事情在这个阶段是不可能的。 .net 核心没有“嵌入 API”

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

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

    我们希望人们使用此功能来制作单曲(或 很少)调用托管代码,或在顶部构建自己的“互操作”。 允许创建指向任何对象的本机函数指针的问题 方法是,如果方法的签名不是超级简单,有 无法自定义编组。例如,如果该方法将 带一个字符串参数,没有办法指定哪个 编码应该暴露给本机代码......等等。

    “嵌入 API”可以让原生代码拥有更多的功能 控制与托管的通信是我们的事情 为未来考虑。

    我们确实考虑过直接公开 coreclr 托管(从新 功能),但它会在生命周期中产生一些重要的问题 管理。而且继续前进真的很棘手 如果运行时实际上是 Mono,则以一致的方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-26
      • 2018-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多