gpt4 book ai didi

来自 dll 的 Java 调用函数

转载 作者:行者123 更新时间:2023-12-02 10:40:28 35 4
gpt4 key购买 nike

我有一个 python 脚本,它导入 zkemkeeper dll 并连接到考勤设备 (ZKTeco)。这是我正在使用的脚本:

from win32com.client import Dispatch

zk = Dispatch("zkemkeeper.ZKEM")
zk.Connect_Net("192.168.0.17", 4370)
print(zk.StartIdentify())
print(zk.StartEnrollEx(7, 2, 1))

这按预期工作正常。不过我想用java来实现同样的目的。如何调用该 Connect_Net 方法?我在java中尝试了以下但没有工作:

public class ZKEM {

static {
System.loadLibrary("zkemkeeper");
}

ZKEM() {
}

public static native boolean Connect_Net(String IPAdd, int Portl);

}

public class Main {

public static void main(String[] args) {

System.err.println(ZKEM.Connect_Net("192.168.0.17", 4370));
}

}

最佳答案

从 Java 调用 native 代码的两个选择是 JNI (Java Native Interface)JNA (Java Native Access)

Java 运行时可以开箱即用地执行 JNI,但您需要创建一个包含专门为 JNI 制作的函数的包装器库(仅放入 native 关键字是不够的)。

JNA 是一个第三方库,使用 libffi使 native 代码可以从 Java 访问。

您必须亲自了解哪种方法更适合您的需求。

编辑:再次查看示例代码,这是 COM 调用吗?虽然 COM 可以用 JNA 来完成(我自己就是这么做的),但它相当复杂。您最好的选择可能是执行实际调用的包装 C 库或 Java/COM 桥接产品,如 JACOB (但是从未使用过它)。

关于来自 dll 的 Java 调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52944462/

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