您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

如何获得对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类型之一来捕获返回的值,或者使用您自己的子类。例如:

// Original C declaration
void allocate_buffer(char **bufp, int* lenp);

// Equivalent JNA mapping
void allocate_buffer(PointerByReference bufp, IntByReference lenp);

// Usage
PointerByReference 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类派生来声明。

java 2022/1/1 18:16:15 有433人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶