在 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;
}
但它不起作用。
您不能任意砍掉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)
。