gpt4 book ai didi

android - Mono for Android Binding - 锯齿状数组

转载 作者:行者123 更新时间:2023-11-29 21:40:22 25 4
gpt4 key购买 nike

我们正在绑定(bind)一个具有如下方法的 Java 库:

void onDataReceived(java.lang.String fromNode, java.lang.String fromChannel, java.lang.String payloadType, byte[][] payload)

注意 byte[][] payload 参数。

一切都编译得很好,除了在运行时从 Java 触发监听器时,我们得到错误:

System.NotSupportedException: Rectangular arrays are not currently supported.

Android 绑定(bind)项目的 Mono 目前支持吗?

是否可以使用其他类型来代替 byte[][] 来完成工作?

最佳答案

Is this currently supported in Mono for Android binding projects?

没有。我想我应该解决这个问题......

是否需要payload参数?如果不这样做,您可以只编辑生成的代码 [^1] 以删除 payload 的编码(marshal)处理。

如果您确实需要payload参数,您可以编辑生成的代码并替换它:

byte[][] payload = (byte[][]) JNIEnv.GetArray (native_payload, JniHandleOwnership.DoNotTransfer, typeof (byte[]));

用这个:

byte[][] payload = JNIEnv.GetArray<byte[]> (native_payload);

(至少,该更改适用于我的简单测试 [^2]。)

[^1]:呃,正在编辑生成的代码。

[^2]:简单测试:

Action<byte[][], byte[][]> equal = (a, b) => {
if (!a.SelectMany (_ => _).SequenceEqual (b.SelectMany (_ => _)))
throw new InvalidOperationException ("Sequences don't match!\n" +
"Expected: " + string.Join (" ", a.SelectMany (_ => _).Select (_ => _.ToString ("x2"))) +
" Actual: " + string.Join (" ", b.SelectMany (_ => _).Select (_ => _.ToString ("x2"))));
};
byte[][] data = new byte[][]{
new byte[]{11, 12, 13},
new byte[]{21, 22, 23},
new byte[]{31, 32, 33},
};
using (var byteArrayArray = new Java.Lang.Object (JNIEnv.NewArray (data), JniHandleOwnership.TransferLocalRef)) {
Console.WriteLine ("# jonp [[b: {0}", JNIEnv.GetClassNameFromInstance (byteArrayArray.Handle));
byte[][] data2 = JNIEnv.GetArray<byte[]> (byteArrayArray.Handle);
equal (data, data2);
}

关于android - Mono for Android Binding - 锯齿状数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17305522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com