如何将数组作为参数传递给从C ++到C#的函数调用

时间:2018-11-07 18:22:00

标签: c# c++ arrays unity3d unmanaged

我编写了一个包装程序,以使用C#从Unity游戏引擎访问C ++库。 它在大多数情况下都有效,但是在尝试将数组作为参数从C ++传递到C#时遇到了多个问题。

我尝试将它们声明为[MarshalAs(UnmanagedType.SafeArray或[MarshalAs(UnmanagedType.LPArray),但我一直收到运行时错误消息,说我无法从C#访问非托管代码。

我最终实现了一个固定的结构,该结构具有我需要的每个数组大小:

struct FloatArray6Dof{
float data[6];};


Func<FloatArray6Dof, bool> del = new Func<FloatArray6Dof, bool>((FloatArray6Dof f) =>
        {
            unsafe
            {
                VectorN pose = new VectorN(6);
                for (int i = 0; i < pose.Dof; i++)
                {
                    pose[i] = f.Array[i];
                }
                //use pose
            }
        });

但是,为此需要更多的“不必要的”代码,并且不适用于动态调整大小的数组。

为了传递动态大小的数组,我实现了PassValue(float value)函数,C ++在循环中传递数组的每个元素。可以,但是效率不是很高。

关于如何在C#的Unity中正确使用C ++中的非托管数组的任何想法吗?

0 个答案:

没有答案