在C ++和C#之间传递零件结构

时间:2013-10-02 10:20:59

标签: c# c++ parameter-passing

在C ++中,我有这样的结构:

struct Structure
{
    std::vector<int> vect;
    int i;
    double d;
};

但在C#中我不需要这个载体。是否可以将此结构的一部分传递给C#?

我尝试做这样的事情:

[StructLayoutAttribute(LayoutKind.Sequential)]
public struct Structure
{
    public int i;
    public double d;
}

但它不起作用。

2 个答案:

答案 0 :(得分:3)

你不能随意切断struct顶部或中间的部分,并期望它能够正常工作,因为你传递的成员的偏移量会有所不同。

----------- ------------
| C++ view | C# view   |
----------- ------------
|   vect   |     i     |
----------- ------------
|     i    |     d     |
----------- ------------
|     d   |
----------

但是,如果将向量移动到struct的底部,您的技巧可能会有效:您应该能够传递单个struct,但不能传递它们的数组。

----------- ------------
| C++ view | C# view   |
----------- ------------
|     i    |     i     |
----------- ------------
|     d    |     d     |
----------- ------------
|   vect   |
----------

如果将Structure用作较大struct的成员,也无效。

答案 1 :(得分:0)

这不起作用,因为.Net结构中缺少vect字段。尝试向.Net结构添加一个与vect完全相同的字段:sizeof(vect)