C++/CLI是微软提供的C++语法扩展,用于桥接原生C++与.NET(如C#),通过/ref class、gcroot等托管类型实现跨语言互操作,支持调用原生代码、暴露.NET接口及安全内存传递。
在 Windows 平台上,C++ 与 C# 交互最常用、最直接的方式是通过 C++/CLI(Common Language Infrastructure),它是微软为桥接原生 C++ 和 .NET(如 C#)设计的语言扩展。它不是“C++ 和 C# 混编”,而是让 C++ 代码能直接创建、调用、持有 .NET 对象,同时保留调用原生 C++ 函数的能力。
C++/CLI 是一种语法扩展(非标准 C++,需 /clr 编译开关),允许你在同一项目中:
接口供 C# 调用在 Visual Studio 中新建一个 CLR 类库(.NET Framework) 项目(不是“控制台应用”或“动态链接库”)。关键设置:
假设你有一个原生 C++ 函数:
// NativeMath.h
int Add(int a, int b);
你想把它暴露给 C#。在 C++/CLI 项目中写:
// ManagedWrapper.h
#using
using namespace System;
public ref class MathWrapper
{
public:
static int Add(int a, int b)
{
return ::Add(a, b); // 调用原生函数
}
};
编译后生成 ManagedWrapper.dll,C# 项目右键“添加引用”→ 浏览到该 DLL 即可使用:
int r = MathWrapper::Add(3, 5); // 在 C# 中可直接调用(注意命名空间)