使用UnmanagedExports和JNA将字节数组从C#返回到Java
发布时间:2020-12-15 22:10:26 所属栏目:百科 来源:网络整理
导读:我最近发现库 UnmanagedExports 允许我使用 JNA直接从Java访问C#-methods. 有没有人知道我尝试将字节数组从C#返回给Java有什么问题? 这是我的例子: C#代码: using System;using RGiesecke.DllExport;namespace JnaTestLibrary{ public class JnaTest { [D
我最近发现库
UnmanagedExports 允许我使用
JNA直接从Java访问C#-methods.
有没有人知道我尝试将字节数组从C#返回给Java有什么问题? 这是我的例子: C#代码: using System; using RGiesecke.DllExport; namespace JnaTestLibrary { public class JnaTest { [DllExport] public static byte[] returnT1() { byte[] t1 = {1,2,3,4,5}; return t1; } } } Java代码: package me.mt.test; import com.sun.jna.Library; import com.sun.jna.Native; import com.sun.jna.Platform; public class JnaTest { public interface JnaTestInterface extends Library{ byte[] returnT1(); } static JnaTestInterface jnaTest = null; static{ if(Platform.is64Bit()){ jnaTest = (JnaTestInterface)Native.loadLibrary("JnaTestLibrary64",JnaTestInterface.class); } else{ jnaTest = (JnaTestInterface)Native.loadLibrary("JnaTestLibrary86",JnaTestInterface.class); } } public byte[] returnT1(){ return jnaTest.returnT1(); } } Java异常: Exception in thread "main" java.lang.IllegalArgumentException: Unsupported return type class [I in function returnT1 解决方法
我通过使用指针解决了这个问题.
C#代码: using System; using RGiesecke.DllExport; namespace JnaTestLibrary { public class JnaTest { [DllExport] public unsafe static byte* returnT1() { byte[] t1 = {1,5}; fixed (byte* p1 = t1) { return p1; } } } } Java代码: package me.mt.test; import com.sun.jna.Library; import com.sun.jna.Native; import com.sun.jna.Platform; import com.sun.jna.Pointer; public class JnaTest { public interface JnaTestInterface extends Library{ Pointer returnT1(); } static JnaTestInterface jnaTest = null; static{ if(Platform.is64Bit()){ jnaTest = (JnaTestInterface)Native.loadLibrary("JnaTestLibrary64",JnaTestInterface.class); } } public byte[] returnT1(){ Pointer p1 = jnaTest.returnT1(); return p1.getByteArray(0,5); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |