如何解决FFI的size_t兼容类型
我正在使用unsafe
代码为C库编写C#绑定。我不知道如何表示在所有情况下都有效的size_t
:
-
System.[U]IntPtr
不能与fixed-sized buffer(我需要)一起使用,因为它们被列入白名单,仅适用于一些基本类型。 - 使用编译时指令与
using Usize = System.Uint32/64
来别名化类型是可行的,但是a)破坏了体系结构之间生成的二进制文件的可移植性,并且b)我必须在所有使用{{1 }}类型。
那么,使用Usize
编写C绑定的正确方法是什么?
解决方法
size_t因平台而异,没有C#等效项。 .Net指出
不幸的是,.NET中没有针对这些类型的预定义解决方案 2.0。因此,必须设计一个。最大的问题是您通常运行相同的.NET二进制文件或32位和64位。所以我们需要一个 类型,其大小是在运行时根据来自 平台。 .NET无法定义这样的类型。 最好的办法是定义一个固定大小的类型和一个自定义 决定运行时大小的封送处理程序。
因此,通过使用 Usize = System.Uint32 / 64
为类型加上别名,使用UIntPtr将是您唯一的选择。版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。