我有这个 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 调用本机代码的两种选择是JNI(Java 本机接口) https://docs.oracle.com/en/java/javase/11/docs/specs/jni/index.html and JNA(Java 本机访问) https://github.com/java-native-access/jna
Java 运行时可以开箱即用地执行 JNI,但您需要创建一个包装器库,其中包含专门为 JNI 制作的函数(只需放入一个native
关键字是不够的)。
JNA 是一个第三方库,它使用libffi https://sourceware.org/libffi/使本机代码可以从 Java 访问。
您必须亲自看看哪种方法更适合您的需求。
编辑:再次查看示例代码,这是 COM 调用吗?虽然 COM 可以用 JNA 来完成(我自己就是这么做的),但它相当复杂。您最好的选择可能是执行实际调用的包装 C 库或 Java/COM 桥接产品,例如JACOB https://sourceforge.net/projects/jacob-project/(但是从未使用过它)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)