java调用C语言执行dll文件

这是一个很大的坑。在里面遨游了两天时间,很无语

注:.dll是运行在Windows环境的。想要在Linux环境运行就是.so文件(.so就是和.dll文件一样,只不过是适用的系统环境不一样而已)

业务:

我的业务是需要调用dll文件,返回一个json格式的结果。

我们有多个应用。其中有上位机应用服务是运行在Windows环境的。因此Linux环境上的那个应用需要调用dll的接口里面组装我我们自己的业务,然后接口里面通过http去请求上位机上的接口,来调用dll文件。

起初。这个上位机在eclipse上是可以直接调用dll文件去运行的。但是idea是无法运行的。

然后上位机这个打成jar包(dll文件放在和src同级、以及src\main\resources下,还有打成war),运行在本地,报了很多错。

类似于下面的。

各种百度说是什么环境变量里面配置,

什么把dll文件复制到C:\Windows\System32、jre\bin等等路径里面、eclipse上的配置等等各种试,还说是缺少什么dll文件让下载。将dll放在java.library.path包含的路径中。都不行。

认真分析一下,eclipse上能运行,肯定就是dll文件放的位置不对。不可能是缺少什么dll文件都不行。

一直的误区是:System.loadLibrary("dll文件名,没有后缀");扫描的事jar包内或者war内的。

所以一直在这里转圈圈。最后在打成jar包。在桌面创建一个文件夹,把jar包和所要用的dll文件都复制进入都是同级。结果测试就ok。感觉真滴很坑。

以上分享给大家。具体我也不太清楚我这个方法是否适用你,但是我目前是ok了。
有什么不足之处,还希望请教大家。

 

在eclipse上配置后调用执行正常,但是在idea中就不行。一共有三个类型的错,大概的意思都是下面这个截图中的报错

 

主要的方法是:将比如将一个jar包放在Windows环境的卓某一个文件夹中,那么把所有的dll文件复制进入,和这个jar同级目录。启动这个jar,就可以正常的调用了

 

public class Demo {
	
	public native int sum(int a,int b);

	public static void main(String[] args) {
		int a = 2;
		int b = 6;
		int c;
		Demo d = new Demo();
		c = d.sum(a, b);
	}
	
	public int getSumAB(int a, int b){
		Demo d = new Demo();
		int sum = d.sum(a, b);
		return sum;
	}

	static
	{
		System.loadLibrary("dll文件名,没有后缀");
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章