JNI调取现有dll文件

java想要调取外部dll文件,而dll文件不是为java准备的,则我们需要自己生成可以调用外部dll文件的可供java调取的dll文件。

首先我们需要生成java文件,声明本地方法。如下:

package com;

public class JniDemo {
	
	
	public static native int init(String model_path,String key);
	
	
	public static native int deinit();
	
}

然后将其生成.h文件,我所在的类文件在com包下,所以cmd进入com包同级目录,并执行javah命令

F:\>cd F:\openCV\openCv\src\main\java

F:\openCV\openCv\src\main\java>javah -encoding UTF-8 -classpath . -jni com.JniDemo

F:\openCV\openCv\src\main\java>

打开VS2017

创建项目,我们要用它创建dll文件。

选取windows桌面的dll动态库 。创建后目录如下:

 右键项目,单击属性。拿我自己的为例,需要用到opencv,所以需要配置相关文件。如下

VC++目录 包含目录:

C:\opencv\build\include
C:\opencv\build\include\opencv
C:\opencv\build\include\opencv2


VC++目录 库目录:

C:\opencv\build\x64\vc14\lib


链接器 输入 附加依赖项【对应opencv版本】:
 

opencv_world345.lib
opencv_world345d.lib

配置完,就可以在dll5.cpp文件编写接口实现类,头文件引入之前生成的.h文件,cpp实现需要引入.h即可编写实现类。

不要忘记将jni.h与jni_md.h同样引入头文件内。java生成的.h文件需要将引入的<jni.h>变成"jni.h"

这样就可以右键生成解决方案了。放在项目指向的Library下,java文件加入如下代码:

static {
		try {
			 System.loadLibrary("dll5");
		} catch (Exception e) {
			// TODO: handle exception
		}
	}

即可使用java上述的方法。如果提示找不到依赖项,就将你所依赖的dll文件放入C:\Windows\System32下即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java中使用JNI(Java Native Interface)调用DLL(Dynamic-Link Library)中间件需要以下步骤: 1. 创建Java类和本地方法声明:首先,在Java类中声明本地方法。本地方法声明使用`native`关键字,并且没有方法体。例如: ```java public class MyDLL { public native void myFunction(); } ``` 2. 生成JNI文件:运行`javac`命令编译Java类,然后使用`javah`命令生成JNI文件。在命令行中切换到包含Java类的目录,并执行以下命令: ```shell javac MyDLL.java javah MyDLL ``` 这将生成名为`MyDLL.h`的头文件。 3. 编写C/C++实现:使用生成的JNI文件作为C/C++代码的基础,实现本地方法。在C/C++文件中,包含生成的头文件并实现本地方法。例如: ```c #include "MyDLL.h" JNIEXPORT void JNICALL Java_MyDLL_myFunction(JNIEnv *env, jobject obj) { // 实现DLL中间件的功能 } ``` 4. 编译C/C++代码为DLL:使用适当的编译器将C/C++代码编译为DLL。具体步骤取决于所使用的编译器和操作系统。 5. 加载和调用DLL:在Java代码中加载并调用DLL。在Java代码中,使用`System.loadLibrary()`方法加载DLL,并调用本地方法。例如: ```java public class Main { static { System.loadLibrary("mydll"); } public static void main(String[] args) { MyDLL mydll = new MyDLL(); mydll.myFunction(); } } ``` 在上述示例中,`System.loadLibrary("mydll")`加载名为`mydll`的DLL,然后通过创建`MyDLL`对象并调用`myFunction()`方法来调用DLL中的函数。 请注意,执行此操作需要确保DLL文件与Java代码在相同的操作系统平台和架构上兼容,并且DLL文件路径正确。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值