我有一个使用库的项目,该库主要基于C++构建。
随该库提供的DLL,我已导入到C#项目中。
在Unity中导入以下方法后:

    [DllImport("pst")]
private static extern int pst_get_sensor(PSTSensor sensor);

我需要此PSTSensor结构,因此请实际使用该方法。
在C++ .h文件中,该结构定义为:
struct PSTSensor
{
        char    name[80];       /**< Device name */
        int     id;             /**< Device identifier (for other tracking interfaces */
        float   pose[16];       /**< Device pose estimate as row-major matrix */
        double  timestamp;      /**< Time the data was recorded */
};

我试图用C#复制它,但最终得到以下结果:
    struct PSTSensor{
    PSTSensor(char[] name, int id, float[] pose, double timestamp){
        this.name = name;
        this.id = id;
        this.pose = pose;
        this.timestamp = timestamp;
    }
    public char[] name;
    public int id;
    public float[] pose;
    public double timestamp;
}

在该项目随附的示例C++代码中,有人说将pst_get_sensor(&sensor)称为“&”符号,我不认识吗?我将如何在C#中调用此方法并使其起作用?

我认为我毁了这个结构,看到我以前从未与他们合作过。至少它不再在编译时抛出错误,但是我认为这仍然是错误的。有什么想法吗?

提前谢谢了,
笑脸

最佳答案

我不确定我是否会完全回答您的问题,但是在c++中,&用于通过引用传递参数,这意味着您要传递的参数可以在函数内部进行操作。在我看来,原始功能用于填写传感器结构。

您可以使用ref或out关键字通过引用传递int C#:

private static extern int pst_get_sensor(PSTSensor ref sensor);

为什么在C#实现中添加构造函数?

关于c# - 从C++到C#,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20143910/

10-10 18:13