交互式网站的发展,免费网站模板的制作方法,fineui 如何做网站,网站项目规划与设计Native AOT#xff0c;即提前本地编译#xff08;Ahead-Of-Time Compilation#xff09;#xff0c;是一种将托管代码#xff08;如 C##xff09;编译为本机可执行文件的技术#xff0c;无需在运行时进行任何代码生成。 #xff08;Native AOT 优缺点截图摘自张善友博…Native AOT即提前本地编译Ahead-Of-Time Compilation是一种将托管代码如 C#编译为本机可执行文件的技术无需在运行时进行任何代码生成。 Native AOT 优缺点截图摘自张善友博客
使用Native AOT发布C# dll
创建 C# 项目并启用 Native AOT 确保使用的是 .NET 6 或更高版本。 在 .csproj 文件中配置 Native AOT。 定义需要调用的方法并使用 UnmanagedCallersOnly 属性导出这些方法。
using System.Runtime.InteropServices;namespace AotDemo
{public class Example{[UnmanagedCallersOnly(EntryPoint Add)]public static int Add(int a, int b){return a b;}}
}发布dll .net8及以下暂不支持x86官网上标注.net9支持 .net8输出x86如下错误提示 反编译Native AOT输出的dll发现是可以防止反编译的
C调用Native AOT输出的C# dll
创建C控制台项目代码如下
#include iostream
#include Windows.h// 定义一个函数指针类型指向接受两个整数参数并返回整数的函数
typedef int (*AddFunc)(int a, int b);int main()
{std::cout Hello World!\n;// 载入名为 AotDemo.dll 的动态链接库并返回库的句柄HINSTANCE hInst LoadLibrary(TEXT(AotDemo.dll));// 检查库是否成功加载if (!hInst) {// 输出错误信息到控制台std::cerr Failed to load library\n;return -1; // 退出程序并返回错误码}// 从动态链接库中获取名为 Add 的函数的地址AddFunc Add (AddFunc)GetProcAddress(hInst, Add);// 检查函数是否成功获取if (!Add) {// 输出错误信息到控制台std::cerr Failed to find method\n;return -1; // 退出程序并返回错误码}// 调用获取的函数传入参数 3 和 4接收返回值int result Add(3, 4);// 输出函数返回结果到控制台std::cout Result: result std::endl;// 释放加载的动态链接库FreeLibrary(hInst);
}控制台打印如下 demo示例