我有这个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));
}
}
答案 0 :(得分:1)
从Java调用本机代码的两个选择是JNI (Java Native Interface)和JNA (Java Native Access)
Java运行时可以直接使用JNI,但是您需要创建一个具有专门为JNI设计的功能的包装器库(仅放置native
关键字是不够的。)
JNA是第3方库,它使用libffi使Java可以访问本机代码。
您必须亲自了解哪种方法更适合您的需求。
编辑:再次查看您的示例代码,那是一个COM调用吗?虽然COM可以使用JNA来完成(自己动手做),但它相当复杂。最好的选择可能是包装程序C库,它可以进行实际的调用,或者是Java / COM桥接产品,例如JACOB(不过,从未使用过)。
答案 1 :(得分:1)
虽然这是一篇旧帖子,但我正在完成一个纯 Java ZKEM: https://github.com/mkhoudary/ZKTeco4J
我过去在 COM4J 中使用 ZKemKeeper DLL: https://github.com/mkhoudary/ZKEMJavaPort
但是纯 Java 的真的很健壮,你可以看 repo,我在最后阶段