gpt4 book ai didi

java - 使用 JNA 调用方法并进行回调

转载 作者:行者123 更新时间:2023-12-01 14:07:39 36 4
gpt4 key购买 nike

我需要通过回调使用 JNA 调用方法,问题是 api 无法识别该方法,因为 JNA 回调不包含传递方法参数的函数。

C 中的函数是:

Result API LS800AutoDocHandle(...
int (__stdcall *userfunc1)(S_CODELINE_INFO_LS800 *CodelineInfo),
int (__stdcall *userfunc2)(S_IMAGE_INFO_LS800 *ImageInfo),
int (__stdcall *userfunc3)(S_IMAGE_INFO_LS800 *ImageInfo),
...);

这个函数调用这个方法

    Reply = LS800AutoDocHandle(...
(CodelineType == READ_CODELINE_MICR ? OnCodelineRead : 0),
(CodelineType == NO_READ_CODELINE ? OnImageFrontReady : 0),
NULL,//OnImageBackReady,
...); // Reserved3

那么我的问题是,如何通过 JNA 回调调用 OnCodelineRead 方法?

最佳答案

JNA 使用Callback对象来表示函数指针,并包括 description of callback usage .

native 代码:

int LS800AutoDocHandle(
int (__stdcall *userfunc1)(S_CODELINE_INFO_LS800* info),
int (__stdcall *userfunc2)(S_CODELINE_INFO_LS800* info),
int (__stdcall *userfunc3)(S_CODELINE_INFO_LS800* info)
);

JNA 映射(可能应该使用 StdCallLibraryAPI 可能是 __stdcall):

public interface CodeLineRead extends StdCallCallback {
int invoke(S_IMAGE_INFO_LS800 info);
}
public interface ImageFrontReady extends StdCallCallback {
int invoke(S_IMAGE_INFO_LS800 info);
}
public interface ImageBackReady extends StdCallCallback {
int invoke(S_IMAGE_INFO_LS800 info);
}

int LS800AutoDocHandle(CodeLineRead f1, ImageFrontReady f2, ImageBackReady f3);

关于java - 使用 JNA 调用方法并进行回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18770950/

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