从dll调用Java函数
我有一个python脚本,它导入一个从dll调用Java函数,java,python-3.x,dll,java-native-interface,Java,Python 3.x,Dll,Java Native Interface,我有一个python脚本,它导入一个zkemceeperdll并连接到考勤设备(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实现同
zkemceeper
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\u 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调用本机代码的两种选择是和 Java运行时可以直接实现JNI,但是您需要创建一个包装器库,其中包含专门为JNI设计的函数(仅输入
native
关键字是不够的)
JNA是一个第三方库,用于从Java访问本机代码
你必须亲自看看哪种方法更适合你的需要
编辑:再次查看示例代码,这是COM调用吗?虽然COM可以用JNA来完成(我自己做),但它相当复杂。您最好的选择可能是执行实际调用的包装器C库或Java/COM桥接器产品,如(但从未使用过它)。从Java调用本机代码的两个选择是和 Java运行时可以直接实现JNI,但是您需要创建一个包装器库,其中包含专门为JNI设计的函数(仅输入
native
关键字是不够的)
JNA是一个第三方库,用于从Java访问本机代码
你必须亲自看看哪种方法更适合你的需要
编辑:再次查看示例代码,这是COM调用吗?虽然COM可以用JNA来完成(我自己做),但它相当复杂。您最好的选择可能是执行实际调用的包装器C库或Java/COM桥接器产品,如(但从未使用过它)。虽然这是一篇老文章,但我正在完成一个纯Java ZKEM: 过去,我在COM4J中使用ZKemKeeper DLL:
但是纯Java版非常强大,你可以看看回购协议,我正处于最后阶段虽然这是一篇老文章,但我正在完成一篇纯Java ZKEM: 过去,我在COM4J中使用ZKemKeeper DLL:
但是纯Java的非常强大,你可以看看回购协议,我已经进入最后阶段了谢谢,尽管我尝试过JNI,但没有成功。您有JNI的例子吗?您尝试使用JNI没有成功,因为您必须先编写所需的包装器库。我没有准备好一个示例,因为我使用JNA进行本机访问,但是有很多教程(基本上是:编写Java类,编译,调用类上的
javah
,实现生成的头中的函数)。Microsoft有关于如何从C使用COM的文档,但如果您不熟悉,也许使用COM桥库将是最好的选择。尽管我尝试了JNI,但没有成功。您有JNI的例子吗?您尝试使用JNI没有成功,因为您必须先编写所需的包装器库。我没有准备好一个示例,因为我使用JNA进行本机访问,但是有很多教程(基本上是:编写Java类,编译,调用类上的javah
,实现生成的头中的函数)。Microsoft有关于如何从C使用COM的文档,但如果您不熟悉,也许使用COM桥库将是最好的