zhouqijie

本地代码托管.NET8运行时



先决条件

  1. C++开发环境。
  2. dotnet8 SDK。



API

在.NET Core 3.0及更高版本中托管 .NET运行时是通过nethosthostfxr库的API完成的。 由这些入口点来处理查找和设置运行时进行初始化所遇到的复杂性;通过它们,还可启动托管应用程序和调用静态托管方法。

在.NET Core 3.0之前,托管运行时的唯一选项是通过coreclrhost.hAPI。 此托管API现已过时,不应用于托管.NET Core 3.0和更高版本的运行时。

#include <nethost.h>
#include <coreclr_delegates.h>
#include <hostfxr.h>



使用nethost.hhostfxr.h创建主机

nethost库提供用于查找hostfxr库的get_hostfxr_path函数。 hostfxr库公开用于托管.NET 运行时的函数。 函数的完整列表可在hostfxr.h和本机托管设计文档中找到。

示例和本教程使用以下函数:
hostfxr_initialize_for_runtime_config:初始化主机上下文,并使用指定的运行时配置准备初始化 .NET 运行时。
hostfxr_get_runtime_delegate:获取对运行时功能的委托。
hostfxr_close:关闭主机上下文。

使用nethost库中的get_hostfxr_pathAPI找到了hostfxr库。 随后加载此库并检索其导出。

hostfxr_initialize_for_runtime_confighostfxr_get_runtime_delegate函数使用将加载的托管组件的运行时配置初始化并启动.NET运行时。 hostfxr_get_runtime_delegate函数用于获取运行时委托,允许加载托管程序集并获取指向该程序集中的静态方法的函数指针。

方法1-加载托管程序集并获取指向托管方法的函数指针。调用示例中的load_assembly_and_get_function_pointer(...)函数。

将调用运行时委托以加载托管程序集并获取指向托管方法的函数指针。委托需要程序集路径、类型名称和方法名称作为输入,并返回可用于调用托管方法的函数指针。

方法2-按程序集限定类名和函数名获取函数指针。调用get_function_pointer_fn类的函数。

可以给每个CORECLR函数单独定义一个类型,也可以不单独定义类型。

auto test1 = rew_get_csharp_function<void (CORECLR_DELEGATE_CALLTYPE*)()>(L"WinFormsTest.Program, WinFormsTest", L"Test1");

本机主机现在可以调用托管方法,并向其传递所需的参数。

CPP test1(); `

(END)