如何将嵌套数组从 C# 编组到 C++?
How to marshal nested array from C# to C++?
我正在用 C++ 制作一个 DLL,以便在 C# 中使用。我需要将数组列表从 C# 传输到 C++ 向量。该数组看起来像
[][]
[][]
.
.
我参考了此答案以将列表编组为向量 link。
它适用于一维数组。但是对于给出嵌套数组的数组列表给出错误“没有对嵌套数组的封送处理支持”。
我的代码在 C# 端看起来像这样,
[DllImport("./x64/Debug/Test.dll")]
public static extern void analysis([MarshalAs(UnmanagedType.LPArray)] double[][] values, int len);
static void Main(string[] args)
{
List<double[]> lst = new List<double[]>();
lst.Add(new double[] { 1.2, 1.3 });
lst.Add(new double[] { 2.3, 2.4 });
lst.Add(new double[] { 3.4, 3.5 });
analysis(lst.ToArray(), lst.Count);
}
而在 C++ 端,
extern "C" __declspec(dllexport) void __cdecl analysis(double* values[], int len)
{
using namespace std;
vector<array<double,2>> ind(values, values + len);
int n = ind.size();
for (int i = 0; i < n; i++)
{
cout << ind[i][0] << ind[i][1] << endl;
}
}
此外,我不确定我是否正确编写了向量构造函数。非常感谢您的帮助。
尝试使用 json。
在 C# 中:
string jsonString = JsonSerializer.Serialize(lst);
然后在 C++ 中反序列化。
我正在用 C++ 制作一个 DLL,以便在 C# 中使用。我需要将数组列表从 C# 传输到 C++ 向量。该数组看起来像
[][]
[][]
.
.
我参考了此答案以将列表编组为向量 link。 它适用于一维数组。但是对于给出嵌套数组的数组列表给出错误“没有对嵌套数组的封送处理支持”。
我的代码在 C# 端看起来像这样,
[DllImport("./x64/Debug/Test.dll")]
public static extern void analysis([MarshalAs(UnmanagedType.LPArray)] double[][] values, int len);
static void Main(string[] args)
{
List<double[]> lst = new List<double[]>();
lst.Add(new double[] { 1.2, 1.3 });
lst.Add(new double[] { 2.3, 2.4 });
lst.Add(new double[] { 3.4, 3.5 });
analysis(lst.ToArray(), lst.Count);
}
而在 C++ 端,
extern "C" __declspec(dllexport) void __cdecl analysis(double* values[], int len)
{
using namespace std;
vector<array<double,2>> ind(values, values + len);
int n = ind.size();
for (int i = 0; i < n; i++)
{
cout << ind[i][0] << ind[i][1] << endl;
}
}
此外,我不确定我是否正确编写了向量构造函数。非常感谢您的帮助。
尝试使用 json。 在 C# 中:
string jsonString = JsonSerializer.Serialize(lst);
然后在 C++ 中反序列化。