栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何获得对DLL的Java JNA调用以获取参数中返回的数据?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何获得对DLL的Java JNA调用以获取参数中返回的数据?

您需要将参数声明为特殊类型,以传达通过引用传递它们的事实。因此,如果Delphi参数是这样的:

procedure Foo(var i: Integer; var d: Double);

您可以将其映射到这样的Java函数:

void Foo(IntByReference i, DoubleByReference d);

并调用该函数:

IntByReference iref = new IntByReference();DoubleByReference dref = new DoubleByReference();INSTANCE.Foo(iref, dref);int i = iref.getValue();double d = dref.getValue():

文档中对此进行了详细介绍:

使用ByReference参数

当函数接受指向类型的指针参数时,您可以使用ByReference类型之一来捕获返回的值,或者使用您自己的子类。例如:

// Original C declarationvoid allocate_buffer(char **bufp, int* lenp);// Equivalent JNA mappingvoid allocate_buffer(PointerByReference bufp, IntByReference lenp);// UsagePointerByReference pref = new PointerByReference();IntByReference iref = new IntByReference();lib.allocate_buffer(pref, iref);Pointer p = pref.getValue();byte[] buffer = p.getByteArray(0, iref.getValue());

另外,您可以将Java数组与所需类型的单个元素一起使用,但是ByReference约定可以更好地传达代码的意图。除了getByteArray()之外,Pointer类还提供了许多访问器方法,这些方法可以有效地用作对内存的类型转换。

类型安全的指针可以通过从PointerType类派生来声明。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/387652.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号