gpt4 book ai didi

c# - 如何从 C# 将对象设置为 C++

转载 作者:行者123 更新时间:2023-11-28 08:08:39 25 4
gpt4 key购买 nike

我想从 C# 配置一个 C++ 项目。

例如:如果我在 C# 中有这个类:

public class Person
{
public Person(){}

public string FirstName
{get; set;}

public string LastName
{get; set;}

public int Age
{get; set;}
}

然后我有一个人员列表:

Person per1 = new Person();
per1.FirstName = "Per1";
per1.LastName = "Last";
per1.Age = 20;


Person per2 = new Person();
per2.FirstName = "Per2";
per2.LastName = "Last2";
per2.Age = 21;

然后我有:

List<Person> persons = new List();
persons.Add(per1);
persons.Add(per2);

我的问题是我怎样才能通过'

persons

' C++ 源代码中的列表。

非常感谢 sample !

提前致谢。

最佳答案

您不能传递 List<>到非托管 C++,因为它无法访问 CLR,也不知道如何处理它。

您可以做的是在 C++ 中定义一个与您的 C# 类布局相匹配的结构,并将其传递给需要数组的导出 C++ 函数。根据您对 C# 和 C++ 定义的控制程度,您可以做一些事情来让自己的生活更轻松:

首先,在考虑互操作的情况下定义 C# 类型:

// In C#:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct Person
{
[MarshalAs(UnmanagedType.LPWStr)] public string FirstName;
[MarshalAs(UnmanagedType.LPWStr)] public string LastName;
public int Age;
}

// In C++
typedef struct tagPerson
{
LPWSTR firstname;
LPWSTR lastname;
LONG age;
} Person;

其次,由于 C/C++ 数组不受管理,您将需要一些其他方式来定义它的大小;最简单的选择是将第二个参数传递给您的 C++ 函数,即长度。

// In C++
extern "C" __declspec( dllexport ) void MyFunction(LONG count, Person[] people);

// In C#
[DllImport("mydll.dll")]
public static extern void MyFunction(
int count,
[MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] Person[] people);

然后你可以简单地在C#中调用这个方法;如果您已经填充了 List<Person>你会这样做:

var personsArray = persons.ToArray();
NativeMethods.MyFunction(personsArray.Length, personsArray);

关于c# - 如何从 C# 将对象设置为 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9651585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com