Xamarin 统一 API:本机库绑定:NSUInteger 与枚举

Xamarin Unified API: Native library binding: NSUInteger vs. enum

我在 Xamarin 中的绑定项目的帮助下绑定到本机 Objective-C 库。

一切正常。现在我将我的解决方案迁移到 Xamarin Unified API 和 32 位和 64 位,经过大量工作后,它再次正常工作。

虽然一切正常,但我想知道 enums 如何在 32/64 环境下工作。

在Objective-C我有:

typedef NS_OPTIONS(NSUInteger, ...在32位环境下备份32位,在64位环境下备份64位

StructsAndEnums.cs 中,我对上述 NS_OPTIONS-NSUInteger 只有一个正常的 enum。但是枚举(没有进一步说明)在 C# 中始终是 32 位的。该绑定如何在 64 位环境下工作?

是否有任何智能机制(在编译或 运行 时)识别本机库中的方法何时需要 64 位参数(并且可以 "convert" 将 32 位枚举转换为 64少量)?

是的,有。

枚举使用 64 位类型(long 或 ulong),并使用 [Native] 属性对其进行修饰:

[Native]
public enum MyEnum : long
{
    // ...
}

然后你可以在你的ApiDefinition.cs中使用枚举,绑定代码会自动生成正确的东西。

请注意,您不能在 P/Invokes 中使用这些枚举,因为它们不是特殊情况(在这些情况下可以使用本机类型 nint/nunit)。