jni调用dll路径问题。

liuguocheng 2011-05-31 04:56:13

public class Sys {
public static native String showHDSerial();

static {
String path = "";
File f = new File("lib/native");
try {
path = f.getAbsolutePath();
System.out.println(path);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.setProperty("java.library.path", path);//
System.loadLibrary("Sys");
}

public static void main(String[] args) {
String a = showHDSerial();

System.out.println("mac:" + a);

}
}



这样也是取不到dll,请问是如如何加载dll呀?
...全文
322 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
LazyCat2222 2011-06-03
  • 打赏
  • 举报
回复
不是吧,你用当前的目录相对路径呢??src下面的包里面。。
liuguocheng 2011-06-01
  • 打赏
  • 举报
回复

public class Sys {
public static native String showHDSerial();

static {

try {


System.load("E:/jsp/quality/WebRoot/WEB-INF/classes/net/hlj/util/Sys.dll"); // 注意

} catch (Exception e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
String a = showHDSerial();

System.out.println("mac:" + a);

}
}





这个文件放到src下好使,但是放到包里就不行了?为什么?
liuguocheng 2011-06-01
  • 打赏
  • 举报
回复
我放到system32 里面,如果在src下可以,但是放到包里就不行了。
LazyCat2222 2011-06-01
  • 打赏
  • 举报
回复
Java中加载dll文件的方法有两种:
①、System.load(String filename);
从作为动态库的本地文件系统中以指定的文件名加载代码文件。文件名参数必须是完整的路径名(指的是绝对路径)。dll文件可以随便放到哪个目录下面,指定了绝对路径找到文件就OK了。filename指的就是加载的文件。

②、System.loadLibrary(String libname);
  
加载由 libname 参数指定的系统库。将库名映射到实际系统库的方法取决于系统,libname指的指定的动态库的库名。
用这个方法我是直接把dll文件放到System32下面的,自动去加载的。


liuguocheng 2011-06-01
  • 打赏
  • 举报
回复
还是没弄出来,1楼的我试了,还是不行呀。能再详细点吗?
Bannings 2011-05-31
  • 打赏
  • 举报
回复
给篇博文:
http://blog.csdn.net/zhangao0086/archive/2011/05/02/6384795.aspx
zju2004 2011-05-31
  • 打赏
  • 举报
回复

import com.sun.jna.Library;
import com.sun.jna.Native;

public interface HardInfo2Lib extends Library {

public static final String DllFilename="PcHardInfo.dll";
public static final String DllFile_Md5="CC17B758569CA565738540F9197E6135";

HardInfo2Lib INSTANCE = (HardInfo2Lib) Native.loadLibrary("PcHardInfo",HardInfo2Lib.class);

String GetMachineUUID();
String GetCPUID();
String GetPriHddSerialNumber();



}

此处dll放在Tomcat下

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧