代码之家  ›  专栏  ›  技术社区  ›  Johann Gerell

P/Invoke助手程序集中符合CLS的类型

  •  1
  • Johann Gerell  · 技术社区  · 14 年前

    • 使用 Int32 在一个 unsigned int .
    • 使用 UInt32 内部的 P/Invoke声明,其中非托管声明 ,然后用一个 方法需要 国际32 并将其转化为 UInt32公司 打电话给 方法。

    2 回复  |  直到 12 年前
        1
  •  1
  •   Hans Passant    14 年前

    当uint变得太大时,P/Invoke marshaller不会抱怨,你只会得到一个负int

    符合逻辑的 约束。就像字符串的长度或内存块的大小一样,它永远不能是负数。实际上,这样的数字永远不会溢出。因为不可能分配那么多内存。我不记得在一个API中运行过一次,在这个API中,uint应该被使用。因此,我认为您可以直接使用带有int的pinvoke声明。

        2
  •  1
  •   colithium    14 年前

    我不认为你会得到正确的行为如果你选择1。Int32只能高达2147483647。而无符号整数则上升到4294967295。只要你知道你不需要任何超过20亿的值,这并不重要。但是为了在技术上正确,公共接口应该公开一个更大的类型,并执行边界检查,以确保它适合一个无符号int,如果不适合,则抛出一个异常。