C#调用C++ DLL
C++使用VS动态链接库生成对应的DLL,将DLL放到C#项目下的bin文件夹对应的目录下。
在DLL过程内,
将C++DLL暴露出来的接口使用 extern "C" __declspec(dllexport) 声明。
extern "C" __declspec(dllexport) int API(int, int);
使用extern "C"的原因是因为C++的接口在编译后会添加额外信息使得函数名发生变化,会导致找不到对应的函数入口。
使用winsiggen工具将C接口转换成C#接口,然后在C#中声明。
然后就可以直接在C#项目中使用了。("<Unknown>"要替换成对应的DLL文件名,如"API.DLL")
C#项目中,在调用C++DLL的地方,在文件开头要添加
using System.Runtime.InteropServices;
当C#警告无法找到对应模块时,一般是对应的DLL缺少,可以看一下C++ DLL是否还引用别的DLL,要将对应的DLL也放到C#文件中。
当C#警告堆栈不对称时,可以在导入接口时增加
CallingConvention = CallingConvention.Cdecl
效果如下:
[System.Runtime.InteropServices.DllImportAttribute("<Unknown>", EntryPoint="API", CallingConvention = CallingConvention.Cdecl)] public static extern int API(int param0, int param1) ;
C++DLL的release版本的库文件比debug版本的库文件要小很多,这是因为debug版本的库文件中有调试信息。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix