将具有结构数组的结构从c#传递到c ++

时间:2018-12-23 13:10:04

标签: c# c++

我有一个C#结构层次结构。

private struct Vector3
{
    public float x;
    public float y;
    public float z;
}

private structure Location
{
    public Vector3 coords;
    public float distanceFromOrigin;
}

private struct Locations
{
    public Location[] locations;
}

private struct Scene
{
    public Locations cam1;
    public Locations cam2;
    public float timeInMilliSecs;
}

我正在实例化Scene,并分别使用cam1cam2来获取 10 个位置的数组。一切都很好。至此可以正常工作,并且用正确的数据填充了数据结构。

我要将Scene的实例传递给非托管DLL

[DllImport(dllname)]
private static extern void updateScene(Scene scene);

在我的C ++中,我有

extern "C" {
    DLL_EXPORT void updateScene(Scene scene);
}

和超载

void updateScene(Scene scene) {
    setSecene(scene); // this calls function fine but with erroneous data
}

以及等效结构的签名

struct Vector3
{
    float x;
    float y;
    float z;
}

struct Location
{
    Vector3 coords;
    float distanceFromOrigin;
}

struct Locations
{
    Location locations[10];
}

struct Scene
{
    Locations cam1;
    Locations cam2;
    float timeInMilliSecs;
}

Scene结构以正确的数据结构而不是正确的数据传递到C中,Vector3都不正确,timeInMilliSecs始终为0。

以前,我将Locations作为Location的单个实例,并且工作正常,但是由于将其设置为数组,因此无法正常工作。

我猜想我需要将其编组起来,但是我不知道从哪里开始。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

尝试:

[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
public Location[] locations;

c#中的数组是引用类型。