gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 00:32:56 25 4
gpt4 key购买 nike

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

代码总结

C++ 端

结构如下:

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

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

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

handtracker 只是包装类的一个实例。

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

关于c# - 将结构(或类)从 C++ dll 传递到 C# (Unity 3D),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30123636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com