在本文中,将探讨如何在Visual Studio2022中将C#库集成到C++项目中。即使使用的是早期版本的Visual Studio,也可以按照这里描述的步骤操作,因为大部分步骤都是相同的。本文旨在回答CodeProject的QnA上的一个问题。C++项目不必是MFC项目,可以是控制台或其他类型的项目,其中可以忽略第7步,因为对于C++项目类型不适用。
注意:本示例不包括在C++ UI中托管C# UI元素,这是一个复杂的话题。为了简化,将在C++项目中使用一个简单的C#类,该类具有Add和AddList方法。
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;
}
}
}
通过在解决方案资源管理器中右键单击项目并选择“属性”,打开MFC项目属性。
属性页对话框显示后,启用.NETCLR。.NET Framework版本必须与C#库相同。
通过右键单击引用节点并选择“添加引用...”,在MFC项目中添加对C#库的引用。选中想要添加引用的C#项目。
接下来,将添加对C#项目的构建依赖,以便每当构建MFC/C++时,Visual Studio会首先构建C#项目。选中C#项目以设置构建依赖。
关闭配置管理器。接下来,添加/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"
最后一步是向MFC项目添加两个名为Add和Add List的按钮。双击UI设计器中的按钮,将为创建一个空的按钮处理程序,以便调用C#的Add或AddList方法。
在将使用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。