【问题标题】:How to marshal nested array from C# to C++?如何将嵌套数组从 C# 编组到 C++?
【发布时间】:2021-11-09 06:27:21
【问题描述】:

我正在用 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;
    }
}

另外,我不确定我是否正确编写了向量构造函数。非常感谢您的帮助。

【问题讨论】:

    标签: c# c++ dll dllexport


    【解决方案1】:

    尝试使用 json。 在 C# 中:

    string jsonString = JsonSerializer.Serialize(lst);
    

    然后在 C++ 中反序列化。

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。
    猜你喜欢
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多