将结构(或 class)从 C++ dll 传递到 C# (Unity 3D)

Pass structure (or class) from C++ dll to C# (Unity 3D)

我正在编写一个包装器以从传感器获取一些数据。虽然我对传递 int、float 和它们的数组没有问题,但我很难掌握如何传递结构。

代码摘要

C++ 端

结构如下:

struct HandInfo
{
    int id;
    float x, y, z;
};

在某个时候,一个静态的、全局可见的 HandInfo leftHand 填充了可通过以下包装函数检索的值:

extern EXPORT_API HandInfo MyWrapper_getLeftHand()
{
    return handtracker.getLeftHand();
}

其中 handtracker 只是包装 class.

的一个实例

C#端

一旦声明了外部函数

[DllImport("MyWrapper")]
private static extern HandInfo MyWrapper_getLeftHand();

在 C# 方面,理想情况下,我会有相同的结构类型

public struct HandInfo
{
    public int id;
    public float x, y, z;
}

并分配一个变量

HandInfo hi = MyWrapper_getLeftHand(); // NAIVELY WRONG CODE

可以理解,这是行不通的。

实现这个的方法是什么?

如果有任何帮助,我将不胜感激。 谢谢大家的宝贵时间。

它应该可以正常工作(至少,在我的一个小型 C++ + C# 项目中,我能够让它在 x86 和 x64 中工作 struct

[DllImport("MyWrapper.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern HandInfo MyWrapper_getLeftHand();

唯一的一点,你必须声明CallingConvention = CallingConvention.Cdecl