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

时间:2015-10-02 12:03:11

标签: c# c++ wrapper

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

struct some_struct{
uchar* data;
size_t size;
}

我想在manged(c#)和native(c ++)之间传递它。 C#中的size_t相当于什么?

P.S。我需要一个完全匹配的大小,因为任何字节差异将导致包装

时的巨大问题

编辑:

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

2 个答案:

答案 0 :(得分:11)

没有C#等同于size_t

C# sizeof() operator始终返回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",这通常会有效,但不保证是正确的。

来自C/C++ definition of size_tsize_t

  

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

答案 1 :(得分:5)

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