当前位置: 首页 > news >正文

使用Native AOT发布C# dll 提供给C++调用

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示例

相关文章:

使用Native AOT发布C# dll 提供给C++调用

Native AOT&#xff0c;即提前本地编译&#xff08;Ahead-Of-Time Compilation&#xff09;&#xff0c;是一种将托管代码&#xff08;如 C#&#xff09;编译为本机可执行文件的技术&#xff0c;无需在运行时进行任何代码生成。 &#xff08;Native AOT 优缺点截图摘自张善友博…...

Git 提交代码日志信息

前言 在项目中经常用到git提交代码&#xff0c;每次提交时需要添加日志信息&#xff0c;那么一套规范的日志信息会让整个git仓库看起来赏心悦目&#xff01; 以下是Git 提交代码日志信息的建议&#xff1a; 一、格式规范 标题&#xff08;Subject&#xff09; 标题是日志信息中…...

Request method ‘POST‘ not supported(500)

前端路径检查 查看前端的请求路径地址、请求类型、方法名是否正确&#xff0c;结果没问题 后端服务检查 查看后端的传参uri、传参类型、方法名&#xff0c;结果没问题 nacos服务名检查 检查注册的服务是否对应&#xff08;我这里是后端的服务名是‘ydlh-gatway’,服务列表走…...

终端环境下关闭显示器

终端环境下关闭显示器 使用vbetool vbetool 使用 lrmi 来运行视频 BIOS 中的代码。目前&#xff0c;它能够更改 DPMS 状态、保存/恢复视频卡状态并尝试从头开始初始化视频卡。 vbetool dpms off...

常见排序算法总结 (三) - 归并排序与归并分治

归并排序 算法思想 将数组元素不断地拆分&#xff0c;直到每一组中只包含一个元素&#xff0c;单个元素天然有序。之后用归并的方式收集跨组的元素&#xff0c;最终形成整个区间上有序的序列。 稳定性分析 归并排序是稳定的&#xff0c;拆分数组时会自然地将元素分成有先后…...

【后端开发】Go语言编程实践,Goroutines和Channels,基于共享变量的并发,反射与底层编程

【后端开发】Go语言编程实践&#xff0c;Goroutines和Channels&#xff0c;基于共享变量的并发&#xff0c;反射与底层编程 【后端开发】Go语言高级编程&#xff0c;CGO、Go汇编语言、RPC实现、Web框架实现、分布式系统 文章目录 1、并发基础, Goroutines和Channels2、基于共享…...

PyTorch 2.5.1: Bugs修复版发布

一&#xff0c;前言 在深度学习框架的不断迭代中&#xff0c;PyTorch 社区始终致力于提供更稳定、更高效的工具。最近&#xff0c;PyTorch 2.5.1 版本正式发布&#xff0c;这个版本主要针对 2.5.0 中发现的问题进行了修复&#xff0c;以提升用户体验。 二&#xff0c;PyTorch 2…...

【Android】组件化嘻嘻嘻gradle耶耶耶

文章目录 Gradle基础总结&#xff1a;gradle-wrapper项目根目录下的 build.gradlesetting.gradle模块中的 build.gradlelocal.properties 和 gradle.properties 组件化&#xff1a;项目下新建一个Gradle文件定义一个ext扩展区域config.gradle全局基础配置&#xff08;使用在项目…...

vulnhub靶场【哈利波特】三部曲之Aragog

前言 使用virtual box虚拟机 靶机&#xff1a;Aragog : 192.168.1.101 攻击&#xff1a;kali : 192.168.1.16 主机发现 使用arp-scan -l扫描&#xff0c;在同一虚拟网卡下 信息收集 使用nmap扫描 发现22端口SSH服务&#xff0c;openssh 80端口HTTP服务&#xff0c;Apach…...

HarmonyOS开发中,如何高效定位并分析内存泄露相关问题

HarmonyOS开发中&#xff0c;如何高效定位并分析内存泄露相关问题 (1)Allocation的应用调试方式Memory泳道Native Allocation泳道 (2)Snapshot(3)ASan的应用使用约束配置参数使能ASan方式一方式二 启用ASanASan检测异常码 (4)HWASan的应用功能介绍约束条件使能HWASan方式一方式…...

java调用ai模型:使用国产通义千问完成基于知识库的问答

整体介绍&#xff1a; 基于RAG&#xff08;Retrieval-Augmented Generation&#xff09;技术&#xff0c;可以实现一个高效的Java智能问答客服机器人。核心思路是将预先准备的问答QA文档&#xff08;例如Word格式文件&#xff09;导入系统&#xff0c;通过数据清洗、向量化处理…...

2023年第十四届蓝桥杯Scratch国赛真题—推箱子

推箱子 程序演示及其源码解析&#xff0c;可前往&#xff1a; https://www.hixinao.com/scratch/creation/show-188.html 若需在线编程&#xff0c;在线测评模考&#xff0c;助力赛事可自行前往题库中心&#xff0c;按需查找&#xff1a; https://www.hixinao.com/ 题库涵盖…...

银河麒麟V10-SP1设置redis开机自启

前言&#xff1a; redis安装请看&#xff1a;银河麒麟V10-SP1离线安装redis5.0.1_银河麒麟v10 redis5.0-CSDN博客 一、编辑自启文件 vim /etc/systemd/system/redis.service [Unit] DescriptionRedis In-Memory Data Store Afternetwork.target [Service] Typeforking ExecS…...

释放超凡性能,打造鸿蒙原生游戏卓越体验

11月26日在华为Mate品牌盛典上&#xff0c;全新Mate70系列及多款全场景新品正式亮相。在游戏领域&#xff0c;HarmonyOS NEXT加持下游戏的性能得到充分释放。HarmonyOS SDK为开发者提供了软硬协同的系统级图形加速解决方案——Graphics Accelerate Kit&#xff08;图形加速服务…...

Node.js 实战: 爬取百度新闻并序列化 - 完整教程

很多时候我们需要爬取一些公开的网页内容来做一些数据分析和统计。而多数时候&#xff0c;大家会用到python &#xff0c;因为实现起来很方便。但是其实Node.js 用来爬取网络内容&#xff0c;也是非常强大的。 今天我向大家介绍一下我自己写的一个百度新闻的爬虫&#xff0c;可…...

106.【C语言】数据结构之二叉树的三种递归遍历方式

目录 1.知识回顾 2.分析二叉树的三种遍历方式 1.总览 2.前序遍历 3.中序遍历 4.后序遍历 5.层序遍历 3.代码实现 1.准备工作 2.前序遍历函数PreOrder 测试结果 3.中序遍历函数InOrder 测试结果 4.后序遍历函数PostOrder 测试结果 4.底层分析 1.知识回顾 在99.…...

qt QToolButton详解

1、概述 QToolButton是Qt框架中的一个控件&#xff0c;它继承自QAbstractButton。QToolButton通常用于工具栏&#xff08;QToolBar&#xff09;中&#xff0c;提供了一种快速访问命令或选项的方式。与普通的QPushButton按钮相比&#xff0c;QToolButton通常只显示一个图标而不…...

2024年大热,Access平替升级方案,也适合Excel用户

欢迎各位看官&#xff0c;您来了&#xff0c;就对了&#xff01; 您多半是Access忠实粉丝&#xff0c;至少是excel用户&#xff0c;亦或是WPS用户吧。那就对了&#xff0c;今天的分享肯定对您有用。 本文1100字&#xff0c;阅读时长2分50秒&#xff01; 现实总是不尽人意&am…...

探索Scala的模式匹配:身份证识别与等级判定!!! #Scala # scala #匹配模式

在Scala编程语言中&#xff0c;模式匹配是一个强大且表达力丰富的特性&#xff0c;它允许我们以声明式的方式处理多种情况。今天&#xff0c;我们将通过两个有趣的例子来展示Scala模式匹配的魅力&#xff1a;身份证号识别和等级判定。 1. 身份证号识别&#xff1a;定位你的家乡…...

python数据分析之爬虫基础:爬虫介绍以及urllib详解

前言 在数据分析中&#xff0c;爬虫有着很大作用&#xff0c;可以自动爬取网页中提取的大量的数据&#xff0c;比如从电商网站手机商品信息&#xff0c;为市场分析提供数据基础。也可以补充数据集、检测动态变化等一系列作用。可以说在数据分析中有着相当大的作用&#xff01;…...

信通院:AI4SE行业现状调查报告 2026

这份信通院 2026 年 AI4SE 行业现状调查报告&#xff0c;核心是 AI 与软件工程深度融合进入规模化落地关键期&#xff0c;全流程提效显著&#xff0c;企业高度重视&#xff0c;但仍面临人才、成本等挑战&#xff0c;未来将走向自主编程、多智能体协同的新范式。一、调研概况有效…...

Windows环境下SeaweedFS的快速部署与实战指南

1. 五分钟搞定SeaweedFS Windows安装 第一次听说SeaweedFS时&#xff0c;我也被这个"海草文件系统"的名字逗笑了。但别被名字迷惑&#xff0c;它可是个正经的分布式文件存储系统&#xff0c;特别适合处理海量小文件。我在Windows上部署过好几次&#xff0c;发现比想象…...

中大型团队必备:6款高口碑研发资源管理平台汇总

本文将深入对比6款多维度研发资源管理系统&#xff1a;PingCode、Worktile、致远互联协同云、明道云、织信 Informat、TAPD 在研发成本日益攀升的今天&#xff0c;“人才利用率”已成为企业研发提效的核心指标。很多研发团队面临资源分配不透明、人才忙闲不均、多项目并行时资源…...

基于Vivado工程的FPGA多通道以太网实时同步采集系统——AD7606八通道同步采集与UD...

基于FPGA多通道以太网实时同步采集系统 FPGA: Vivado工程 AD芯片:AD7606 传输协议:UDP 上位机开发软件&#xff1a;QT5.12 AD7606八通道同步采集,最高采样率200KHz&#xff0c;上位机发送指令开始采集&#xff0c;上位机通过千兆以太网udp进行数据传输 QT上位机软件:udp上位…...

2025 年12月 1日KB5070311(操作系统内部版本26200.7309和26100.7309)预览 版

&#x1f525;个人主页&#xff1a;杨利杰YJlio❄️个人专栏&#xff1a;《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》 《Python》 《Kali Linux》《那些年未解决的Windows疑难杂症》&#x1f31f; 让复杂的事情更…...

SpringMVC+MyBatis整合微信H5支付全流程实战(附避坑指南)

SpringMVCMyBatis整合微信H5支付全流程实战&#xff08;附避坑指南&#xff09; 移动支付已成为现代商业的基础设施&#xff0c;而微信H5支付作为连接移动网页与支付系统的重要桥梁&#xff0c;其技术实现却常让开发者陷入各种"坑"。本文将带你从零开始&#xff0c;…...

8通道高速数据采集方案对比:Xilinx ZU27DR的ADC/DAC性能实测报告

8通道高速数据采集方案对比&#xff1a;Xilinx ZU27DR的ADC/DAC性能实测报告 在当今高速数据采集领域&#xff0c;系统架构师们正面临着一个关键抉择&#xff1a;是继续采用传统分立式ADC/DAC方案&#xff0c;还是转向集成度更高的RFSoC解决方案&#xff1f;本文将基于Xilinx Z…...

新手入门:借助快马轻松构建你的第一个抖音更新分析应用

最近在学习抖音生态开发&#xff0c;发现版本更新分析是个挺有意思的切入点。作为新手&#xff0c;我尝试用InsCode(快马)平台搭建了一个简单的分析工具&#xff0c;整个过程比想象中顺利很多。这里记录下我的实践过程&#xff0c;希望能帮到同样刚入门的朋友。 项目构思 抖音每…...

如何让Switch手柄在电脑上完美使用:BetterJoy终极教程

如何让Switch手柄在电脑上完美使用&#xff1a;BetterJoy终极教程 【免费下载链接】BetterJoy Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput 项目地址: https://gitcode.com/…...

别再手动调API了!用Spring Boot + WebClient一键集成Dify智能体(附完整代码)

别再手动调API了&#xff01;用Spring Boot WebClient一键集成Dify智能体&#xff08;附完整代码&#xff09; 在当今快节奏的开发环境中&#xff0c;手动编写重复的API调用代码不仅效率低下&#xff0c;还容易引入错误。对于使用Dify平台的Java开发者来说&#xff0c;如何将智…...