繁体   English   中英

Marshal结构到非托管数组

[英]Marshal struct to unmanaged array

我有一个C#结构来表示一个笛卡尔向量,如下所示:

public struct Vector  
{  
    private double x;  
    private double y;  
    private double z;  

    //Some properties/methods
}

现在我有一个非托管的C dll,我需要用P / Invoke调用。 一些方法期望双[3]参数。

非托管C签名就像

void Cross(double a[3], double b[3], double c[3]);  

有没有办法设置P / Invoke签名,所以我可以传递我的Vector结构的实例,并透明地编组它们到非托管双[3]? 我还需要双向编组,因为非托管函数需要将输出写入参数数组,所以我想我需要编组为LpArray。

您可以在P / Invoke声明中,成员将在所有当前CPU体系结构上正确对齐,以便作为非托管代码中的数组可读:

[DllImport("blah.dll")]
private static extern void Cross(ref Vector a, ref Vector b, ref Vector c);

我没有自己的编译器,但我想知道你是否可以使用类似的东西

[MarshalAs(...)]
[StructLayout(LayoutKind::Sequential, Pack=1)]
public struct Vector  
{  
    private double x;  
    private double y;  
    private double z;  

    //Some properties/methods
}

看到这里这里这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM