从dll调用Java函数

从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实现同

我有一个python脚本,它导入一个
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桥库将是最好的