java 怎么调用dll 带返回值的指针参数

java 怎么调用dll 带返回值的指针参数,第1张

JNIJNative或者jacob都行最理想的是用JNI不过是用JNI比较麻烦,可能需要用C写数据类型转换的函数,但是能保证正确的调用Dll中的函数。Jacob和JNative也都不错,使用比较方法,但是可能无法成功的调用DLL的函数。

1 直接方法调用。java对底层的方法调用被称为native调用,原理就是jni技术。我理解是Java虚拟机加载底层动态库,并记录对java代码提供了哪些底层方法。java代码在需要调用底层方法时,虚拟机查找是否存在对应方法并执行。

2 间接调用。间接调用是指类似于rpc方式的调用,常见的rpc框架,如grpc,thrift等都支持跨语言调用。

JAVA通过JNI调用本地方法,而本地方法是以库文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX机器上是SO文件形式)。通过调用本地的库文件的内部方法,使JAVA可以实现和本地机器的紧密联系,调用系统级的各接口方法。

简单介绍及应用如下:

一、JAVA中所需要做的工作

在JAVA程序中,首先需要在类中声明所调用的库名称,如下:

static {

SystemloadLibrary(“goodluck”);

}

在这里,库的扩展名字可以不用写出来,究竟是DLL还是SO,由系统自己判断。

还需要对将要调用的方法做本地声明,关键字为native。并且只需要声明,而不需要具 体实现。如下:

public native static void set(int i);

public native static int get();

然后编译该JAVA程序文件,生成CLASS,再用JAVAH命令,JNI就会生成C/C++的头文件。

例如程序testdlljava,内容为:

public class testdll

{

static

{

SystemloadLibrary("goodluck");

}

public native static int get();

public native static void set(int i);

public static void main(String[] args)

{

testdll test = new testdll();

testset(10);

Systemoutprintln(testget());

}

}

用javac testdlljava编译它,会生成testdllclass。

再用javah testdll,则会在当前目录下生成testdllh文件,这个文件需要被C/C++程序调用来生成所需的库文件。

在java里定义对应的,分配地址空间大小相同的结构体。

java应该也可以定义struct

比如dword可以定义为long

把c中的pvoid定义找出来,也定义一个struct

Java调用C语言程序时,主要是涉及到 *** 作系统底层的事件。这种时间Java无法处理,例如用户上传一个视频文件,需要后台给视频加上水印,或者后台分离视频流和音频流。只能通过调用C语言处理。

使用Java如何去调用C语言的接口呢?使用Java的JNI技术。

具体调用步骤如下:

1首先创建Java文件 HelloJnijava ,并创建native方法。

2编译Java文件并生成java头文件。

3创建C语言文件,HelloWorldc。

4生成动态链接库文件 libhelloso。

5设置动态链接库文件的目录。

6把刚才生成的so文件拷贝到/home/lib下,然后执行class文件。

以上就是关于java 怎么调用dll 带返回值的指针参数全部的内容,包括:java 怎么调用dll 带返回值的指针参数、java调用底层的几种方法、java如何调用别人给的DLL文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9806821.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存