日期:2014-05-20  浏览次数:20735 次

Jni调用本地方法问题
有一个tcclib.dll文件,

包含这么一个方法,
13. about()
說明: 顯示DLL 版本號碼
參數: 無



我想使用Jni调用这个本地方法,写了一个java类

public class TccPrint{
  public static void main(String[] args){
  new TccPrint().about();
  }
  public native void about();
  static{
  System.load("D:/tcclib.dll");
}
}

这样对么?

------解决方案--------------------
好像是没有后缀的, 加上后缀代码就没有移植性了,因为不同平台的动态链接库后缀不同。
把dll放在和class一起的目录下,
System.load("tcclib");
就可以了。
------解决方案--------------------
tcclib
------解决方案--------------------
如果tcclib.dll是一个别人提供给你的Dll文件,那么你不能直接Jni调用

Java对Jni方法的命名是有要求的,你应该先写

public class TccPrint{ 
public static void main(String[] args){ 
new TccPrint().about(); 

public native void about(); 
static{ 
// System.load("D:/tcclib.dll"); 先注释它了


编译再用javah TccPrint生成的.h文件实现其中的方法编译一个新的dll,在这个dll中才去调用第三方提供的Dll

这时候你再增加上面的System.load("tcclib");不需要路径,不需要后缀,Java会在Path中查找并自动根据操作系统添加后缀名称

------解决方案--------------------
4楼说的有道理。别人给你的dll是不能直接用的。要先编写一个dll作为桥梁