最近工作需要研究下C#能否调用已有的C/C++库,为此写了个小demo总结分享一下,供大家参考
开发环境
Windows平台:
Visual Studio 2019Visual Studio Code.NET SDK 6C/C++动态库
安装插件
vscode安装CMake Tools & C/C++插件
配置工程
通过CMake插件配置C++动态库工程
生成的文件有2个地方需要改动
add_library改为SHARED类型add_library(MyNativeLibrary SHARED MyNativeLibrary.cpp)
cpp里实现导出接口 extern "C"{ __declspec(dllexport) int __stdcall add(int a, int b) { return a + b; }}
编译生成
通过vscode底部build按钮编译,dll文件生成在build目录
C#工程
在cmd中使用dotnet命令创建console工程
> dotnet new console -o MyApp
修改Program.cs为如下内容
using System.Runtime.InteropServices;namespace NetCore{ public class Program { [DllImport(@"MyNativeLibrary\build\Release\MyNativeLibrary.dll", EntryPoint = "add", CallingConvention = CallingConvention.StdCall)] public static extern int Add(int a, int b); public static void Main(string[] args) { int result = Add(1 ,2); Console.WriteLine("result is {0}", result); Console.ReadKey(); } }}
dotnet run就可以看到运行效果了
> dotnet runresult is 3
小结
本文演示了C#调用C/C++动态库的方法,动态库部分需要熟悉vscode及cmake的使用,希望对大家能有帮助
源码地址
dotnet/MyApp
参考资料
C#调用C++
.net tutorial
VS Code with CMake Tools