我在 C++ 中有一个结构:
struct some_struct{
uchar* data;
size_t size;
}
我想在 manged(c#) 和 native(c++) 之间传递它。 C# 中 size_t
的等价物是什么?
PS我需要大小完全匹配,因为任何字节差异都会在包装时导致巨大的问题
编辑:
本机代码和托管代码都在我的完全控制之下(我可以编辑我想要的任何东西)
原文由 Humam Helfawi 发布,翻译遵循 CC BY-SA 4.0 许可协议
我在 C++ 中有一个结构:
struct some_struct{
uchar* data;
size_t size;
}
我想在 manged(c#) 和 native(c++) 之间传递它。 C# 中 size_t
的等价物是什么?
PS我需要大小完全匹配,因为任何字节差异都会在包装时导致巨大的问题
编辑:
本机代码和托管代码都在我的完全控制之下(我可以编辑我想要的任何东西)
原文由 Humam Helfawi 发布,翻译遵循 CC BY-SA 4.0 许可协议
C# 中 size_t 的最佳等效项是 UIntPtr 类型。它在 32 位平台上是 32 位的,在 64 位平台上是 64 位的,并且是无符号的。
原文由 Roger Sanders 发布,翻译遵循 CC BY-SA 3.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
没有与
size_t
等效的 C#。The C#
sizeof()
operator always returns anint
value regardless of platform, so technically the C# equivalent ofsize_t
isint
, but that’s no帮助你。(注意
Marshal.SizeOf()
也返回一个int
。)另请注意,就
sizeof()
和Marshal.Sizeof()
而言,没有任何 C# 对象的大小可以大于 2GB。数组可以大于 2GB,但您不能将sizeof()
或Marshal.SizeOf()
与数组一起使用。出于您的目的,您需要知道 DLL 中的代码版本用于
size_t
并在 C# 中使用适当大小的整数类型。要意识到的一件重要的事情是,在 C/C++ 中
size_t
通常具有与intptr_t
相同的位数,但这不能保证,尤其是对于分段架构。我知道很多人说“使用
UIntPtr
”,这通常会起作用,但不能保证正确。从 --- 的
size_t
/C++ 定义,size_t