我有一个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
,并分别使用cam1
和cam2
来获取 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
的单个实例,并且工作正常,但是由于将其设置为数组,因此无法正常工作。
我猜想我需要将其编组起来,但是我不知道从哪里开始。有人可以帮忙吗?
答案 0 :(得分:1)
尝试:
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
public Location[] locations;
c#中的数组是引用类型。