最近工作需要研究下C#能否调用已有的C/C++库,为此写了个小demo总结分享一下,供大家参考
开发环境Windows平台:
Visual Studio 2019Visual 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(@"MyNativeLibrarybuildReleaseMyNativeLibrary.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



