最近工作需要研究下C#能否调用已有的C/C++库,为此写了个小demo总结分享一下,供大家参考
开发环境
Windows平台:
- Visual Studio 2019
- Visual Studio Code
- .NET SDK 6
C/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 run
result is 3
小结
本文演示了C#调用C/C++动态库的方法,动态库部分需要熟悉vscode及cmake的使用,希望对大家能有帮助
源码地址
dotnet/MyApp
参考资料
C#调用C++
.net tutorial
VS Code with CMake Tools