.Net C# 与 非托管C++互操作性
(一).Net互操性调试环境配置
1.1 将C++ DLL文件输出到主EXE所在目录
1.2 配置C++ DLL项目属性的命令和调试器类型两项
1.3 配置.NET Winform项目属性调试选项。一定要选择“启用本地代码调试”
调试如下图
(二)互操作性的事件处理
1.1 C++ DLL代码如下:
代码
1.2 C#调用代码
代码
(一).Net互操性调试环境配置
1.1 将C++ DLL文件输出到主EXE所在目录
1.2 配置C++ DLL项目属性的命令和调试器类型两项
1.3 配置.NET Winform项目属性调试选项。一定要选择“启用本地代码调试”
调试如下图
(二)互操作性的事件处理
1.1 C++ DLL代码如下:
代码// Bsr.Hardware.cpp : 定义 DLL 应用程序的导出函数。 // #include "stdafx.h" typedef void(*Action)(); typedef void (__stdcall *LPFUN)(int); //定义一个函数指针,此处必须要定义一个函数指针,如果定义为add(int a,int b,void(*ball)(int))这种方式,则C#回调时将无法返回到C++ DLL中的函数调用。 _declspec(dllexport) int add(int a, int b, LPFUN ball=nullptr) { int ret = a + b; if (ball != nullptr) { ball(ret); } return ret+100; } _declspec(dllexport) int add1(int a, int b) { int ret = a + b; return ret; }
1.2 C#调用代码
代码public partial class Form1 : Form { public delegate void AddEvent(int x); //定义委托来与DLL中函数指针匹配 [DllImport("Bsr.Hardware.DLL", EntryPoint = "add", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)] public static extern int add(int a, int b, AddEvent act); [DllImport("Bsr.Hardware.DLL", EntryPoint = "add1", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)] public static extern int add1(int a, int b); public static void ActEvent(int x) { MessageBox.Show(x.ToString()); } private void button1_Click(object sender, EventArgs e) { AddEvent ev = new AddEvent(ActEvent); int ret = add(100, 100, ev); int y = 100; MessageBox.Show("f1=" + ret.ToString()); } }
从明源离职了?
感谢楼主的整理,认真阅读后感觉第5点的“注意,列出来的是两个点后边(此处即dev)多提交的内容。”可能dev改成branch2比较好。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人