什么等于c#中的c ++ size_t

我在c ++中有一个结构:

struct some_struct{ uchar* data; size_t size; } 

我想在manged(c#)和native(c ++)之间传递它。 C#size_t的等价物是什么?

PS我需要一个完全匹配的大小,因为任何字节差异将导致包装时的巨大问题

编辑:

本机和manged代码都在我的完全控制之下(我可以编辑我想要的任何内容)

没有C#等同于size_t

无论平台如何, C# sizeof()运算符总是返回一个int值,所以从技术上讲, size_t的C#等价物是int ,但这对你没有帮助。

(注意Marshal.SizeOf()也返回一个int 。)

另请注意,就sizeof()Marshal.Sizeof()而言,没有C#对象的大小可以大于2GB。 数组可以大于2GB,但不能将sizeof()Marshal.SizeOf()与数组一起使用。

为了您的目的,您需要知道DLL中的代码版本用于size_t并在C#中使用适当的大小整数类型。

要实现的一件重要事情是,在C / C ++中, size_t通常与intptr_t具有相同的位数,但这不能保证,特别是对于分段体系结构。

我知道很多人说“使用UIntPtr ”,这通常会起作用,但并不保证是正确的。


size_tsize_t的C / C ++定义

是sizeof运算符的结果的无符号整数类型;

C#中size_t的最佳等价物是UIntPtr类型。 它在32位平台上是32位,在64位平台上是64位,而且是无符号的。