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

本文关键字:递部 结构 之间 C++ | 更新日期: 2023-09-27 18:33:44

在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;
}

但它不起作用。

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

您不能任意砍掉struct顶部或中间的部分并期望它起作用,因为您传递的成员偏移量会有所不同。

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

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

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

如果将Structure用作较大struct的成员,它也不起作用。

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