C#中调用C++ 动态链接库 dll 的方法
首先,c++的类在c#中是不兼容的,因此,c#只能够使用c++的导出函数,不能使用导出类(非常执着的去搞也是可以的,只是得不偿失,很困难)
.
其次,为了防止c++的编译器对c++函数命名方式进行改变,导出函数要用 extern "C" 来修饰,这个当然是众所周知的了
.
然后,要把一个函数指明是导出函数,要用 _declspec(dllexport) 来修饰
.
因此,一个完整的c++导出函数应该是这样的:
extern "C" _declspec( dllexport ) int MyPlus( int a, int b) { return a+b; } |
在c#中,首先要引用命名空间 using System.Runtime.InteropServices;
.
然后使用 DllImport属性来声明一个外部函数,这个函数必须是静态的,因此,应该长成这个样子:
[DllImport( "CPP.dll" , EntryPoint = "MyPlus" )] public static extern int mp( int a, int b); |
先指定动态链接库名字,EntryPoint是c++中的函数名,mp是你在c#使用的函数名.
.
至此,你就可以随心所欲的使用这个函数了,是不是很简单?
.
如果非常想使用c++中的类,那么只能模仿c++编译器的技术,手动实现所谓的this指针,这个无非是语法糖
把对象的指针强制转换成int类型返回给c#,然后把c++里类的函数包装成一个外部函数,把对象指针以int形式传入
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架