我有一个C#结构来表示一个笛卡尔向量,如下所示:
public struct Vector
{
private double x;
private double y;
private double z;
//Some properties/methods
}
现在我需要使用P / Invoke调用非托管C dll。有些方法需要双[3]参数。
非托管C签名类似于
void Cross(double a[3], double b[3], double c[3]);
有没有办法设置P / Invoke签名,这样我就可以传递我的Vector结构的实例并将它们透明地封送到非托管双[3]?我还需要双向编组,因为非托管函数需要将输出写入参数数组,所以我想我需要编组为LpArray。
答案 0 :(得分:4)
您可以在您的P / Invoke声明中,成员将在所有当前CPU架构上正确对齐,以便在非托管代码中作为数组读取:
[DllImport("blah.dll")]
private static extern void Cross(ref Vector a, ref Vector b, ref Vector c);
答案 1 :(得分:0)