从java中调用JNI编写的函数而不加载DLL

时间:2015-04-20 16:01:28

标签: java c java-native-interface

我有一个用C语言编写的代码,用JNI加载带有CallStaticVoidMethod的java类。
我希望java类能够从C代码中调用特定的函数 我在网上看过一些例子,但是所有这些例子都加载了一个与java类无关的DLL(使用System.loadLibrary)。
java类是否可能从加载它的原始C代码中调用一个函数?

2 个答案:

答案 0 :(得分:0)

是的,你可以,见https://stackoverflow.com/a/21734539/192373。关键是RegisterNatives() JNI函数。

答案 1 :(得分:0)

如果您不想使用本机方法,您还可以将函数指针传递给Java并使用JNA来调用该函数。

(我用这个来调用Windows上的COM对象vtables中的函数,因为我不想为每个对象编写一个包装器DLL。不同之处在于我没有传递函数指针而是计算它们来自对象地址。)