「jnajava包」jna jar
今天给各位分享jnajava包的知识,其中也会对jna jar进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java用JNA调用c/c++的dll接口时,怎么获取接口中的out参数,例如:
- 2、java程序需要用jna调用一个***.so文件,我想把这个.so打到jar包里面,以后不需要再单独找,请问有没有办法?
- 3、下载了一个Java的jna包应该放在哪个文件夹下
- 4、java中jna的问题
java用JNA调用c/c++的dll接口时,怎么获取接口中的out参数,例如:
java通过jna调用c++/c的.dll/.so库接口
1。通过jni技术可以实现java调用so文件(这个自己实现了,以前的日志也有,并没有用jni来调用dll文件,原因是自己对这个不熟啊,不知道怎样生成dll文件。。。。)。
2.使用jni的时候会显得很繁琐,因为要有许多函数的声明要相同,jna技术就可以省却这一点,拿到一个现成的dll,只要知道函数声明,就可以直接调用了(用jna还未实验调用so文件)。
下面介绍一下jna调用dll的过程。
1.导入jna.jar包,这个就不说了,下载一个就可以了。
2.主要代码:
import com.sun.jna.Library;import com.sun.jna.Native;public interface Net extends Library { Net lib = (Net)Native.loadLibrary("NetDvr2", Net.class); int NETDVR_startup();}//调用public class TestJna { public static void main(String[] args) { System.out.println(Net.lib.NETDVR_startup()); }}NetDvr2.dll放在工程的根目录下边即可。
可能出现的错误:
java.lang.UnsatisfiedLinkError: Unable to load library 'NetDvr2': ???????¨
原因是NetDvr2.dll(或者NetDvr2.so)还依赖于其他几个dll(so)文件,把他们一起拷到该java工程的根目录就行了。
查看一个dll文件所依赖的dll文件可以用Depends.exe。
java程序需要用jna调用一个***.so文件,我想把这个.so打到jar包里面,以后不需要再单独找,请问有没有办法?
您好,是这样的:
import com.sun.jna.Library;
import com.sun.jna.Native;
public class TestSo {
public interface LgetLib extends Library {
// 调用linux下面的so文件,注意,这里只要写test就可以了,不要写libtest,也不要加后缀
LgetLib INSTANCE = (LgetLib) Native.loadLibrary("test",LgetLib.class);
int add(int a,int b);
}
public int add(int a,int b){
return LgetLib.INSTANCE.add(a,b);
}
public static void main(String[] args) {
TestSo ts = new TestSo();
int c = ts.add(10,20);
System.out.println("10+20="+c);
}
}
下载了一个Java的jna包应该放在哪个文件夹下
可以放在 WEB-INF下,你自己建一个文件夹,比如:lib,然后把包放到里面,右键build path-----add External Archives最后选中你的包就行
java中jna的问题
1、在VC下创建一个动态链接库项目testJNA
2、在头文件里声明函数
C代码 收藏代码
extern "C" _declspec(dllexport) int add(int first, int second);
红色字体部分是必须的,包括定义结构体时也需要。应该是说此函数是发布的。
3、在源码里实现函数
C代码 收藏代码
int add(int first, int second) {
printf("(c) test jna : %d + %d = %d", first, second, first + second);
return first + second;
}
4、生成dll文件
5、定义一个表示链接库的接口
接口TestJnaLib继承自com.sun.jna.Library,此接口有一个实例
Java代码 收藏代码
TestJnaLib INSTANCE = (TestJnaLib)Native.loadLibrary("testJNA.dll", TestJnaLib.class);
此实例由jna通过反射自动生成。
6、定义对应dll里的方法
Java代码 收藏代码
int add(int first, int second);
7、调用本地方法
Java代码 收藏代码
TestJnaLib.INSTANCE.add(3, 5);
Jna回调Java方法:
1、在C语言部分定义带回调函数的函数
C代码 收藏代码
extern "C" _declspec(dllexport) void methodWithCallback(int (*fp)(int left, int right), int left, int right);
红色加粗部分是函数指针。
2、Java部分定义一个回调接口
必须继承自com.sun.jna.Callback接口
Java代码 收藏代码
public interface FunCallBack extends Callback {
int invoke(int left, int right);
}
Invoke方法里的参数顺序与C函数的对应
3、定义回调接口的实现
Java代码 收藏代码
public class CallbackFunImpl implements FunCallBack {
@Override
public int invoke(int left, int right) {
System.out.printf("in java :%d + %d = %d\n", left, right, left + right);
return left + right;
}
}
4、在表示链接库实现的接口里定义要回调的本地函数
Java代码 收藏代码
void methodWithCallback(Callback callback, int left, int right);
本地函数的函数指针用Callback 接口替代。
5、调用带函数指针的本地函数
Java代码 收藏代码
TestJnaLib.INSTANCE.methodWithCallback(new CallbackFunImpl(), 4, 6)
关于jnajava包和jna jar的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-11-27,除非注明,否则均为
原创文章,转载请注明出处。