C#库在C++项目中的集成指南

在本文中,将探讨如何在Visual Studio2022中将C#库集成到C++项目中。即使使用的是早期版本的Visual Studio,也可以按照这里描述的步骤操作,因为大部分步骤都是相同的。本文旨在回答CodeProject的QnA上的一个问题。C++项目不必是MFC项目,可以是控制台或其他类型的项目,其中可以忽略第7步,因为对于C++项目类型不适用。

注意:本示例不包括在C++ UI中托管C# UI元素,这是一个复杂的话题。为了简化,将在C++项目中使用一个简单的C#类,该类具有Add和AddList方法。

C#类示例

using System; namespace CSharp { public class CSharpMath { public int Add(int a, int b) { return a + b; } public int AddList(List arr) { int sum = 0; foreach (int n in arr) sum += n; return sum; } } }

步骤1:打开MFC项目属性

通过在解决方案资源管理器中右键单击项目并选择“属性”,打开MFC项目属性。

步骤2:启用.NETCLR

属性页对话框显示后,启用.NETCLR。.NET Framework版本必须与C#库相同。

步骤3:在MFC项目中添加对C#库的引用

通过右键单击引用节点并选择“添加引用...”,在MFC项目中添加对C#库的引用。选中想要添加引用的C#项目。

步骤4:添加对C#项目的构建依赖

接下来,将添加对C#项目的构建依赖,以便每当构建MFC/C++时,Visual Studio会首先构建C#项目。选中C#项目以设置构建依赖。

步骤5:配置平台

关闭配置管理器。接下来,添加/AI开关到C++编译器。/AI开关告诉C++编译器在哪里找到C#DLL。必须为Debug x86、Debug x64、Release x86和Release x64输入四个不同的路径。路径可以是相对的。如下所示:

/AI "..\\..\\MFCwithCSharp\\CSharpClass\\bin\\x86\\Debug" /AI "..\\..\\MFCwithCSharp\\CSharpClass\\bin\\x64\\Debug" /AI "..\\..\\MFCwithCSharp\\CSharpClass\\bin\\x86\\Release" /AI "..\\..\\MFCwithCSharp\\CSharpClass\\bin\\x64\\Release"

步骤6:添加按钮

最后一步是向MFC项目添加两个名为Add和Add List的按钮。双击UI设计器中的按钮,将为创建一个空的按钮处理程序,以便调用C#的Add或AddList方法。

步骤7:在cpp中使用C#类

在将使用C#类的cpp中,添加using关键字以导入C# DLL。根据自己的DLL名称进行修改。

#using "CSharpClass.dll"

在第一个按钮处理程序中,添加以下代码以调用C#类Add()。确保C#类类型以帽子(^)结尾,并使用gcnew来实例化C#类(不要使用new关键字,因为它是为在堆上实例化原生C++对象保留的)。它在消息框中显示加法结果。

void CMFCwithCSharpDlg::OnBnClickedBtnAdd() { CSharp::CSharpMath^ mathClass = gcnew CSharp::CSharpMath(); int result = mathClass->Add(2, 6); char buf[200]; sprintf_s(buf, "Add result: %d", result); MessageBoxA(GetSafeHwnd(), buf, "Add", MB_OK); }

可以使用.NET基础类库(BCL)例如List类。将点替换为::在命名空间中。记得在MFC对话框中添加另一个按钮以调用AddList(),并在函数中添加以下代码。

void CMFCwithCSharpDlg::OnBnClickedBtnAddList() { CSharp::CSharpMath^ mathClass = gcnew CSharp::CSharpMath(); System::Collections::Generic::List^ myList = gcnew System::Collections::Generic::List(); myList->Add(1); myList->Add(2); myList->Add(3); int result = mathClass->AddList(myList); char buf[200]; sprintf_s(buf, "Add List result: %d", result); MessageBoxA(GetSafeHwnd(), buf, "Add List", MB_OK); }

构建C++项目,C#项目将因为第4步中设置的构建依赖而自动首先构建。点击Add或Add List按钮。确保它不会崩溃,并且结果是正确的。如果遇到“C# dll无法找到”的错误,需要将C# dll复制到C++可执行文件文件夹中。

以上就是示例的全部内容。希望能够将C#库集成到C++项目中。下一步是掌握C++/CLI

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485