我有一个使用库的项目,该库主要基于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/