本人以前一直操delphi,最近开始学习java,但是老本不能丢啊,再说,delphi在某些方面确实有比java快速优越的地方(不用多说哈)!呵呵,还说有JNI技术正好有这个机会将这两种技术结合。本来以为比较简单,但是一个路径问题居然弄的我冒皮皮。
先将我的问题描述一些,免得新手犯和我一样的困惑!
1,首先定义java一段的本地函数:
public class HelloWorld {
public native void printText(); //delphi短需要实现的函数
static {
System.loadLibrary("DelphiAction");
}
public static void main(String[] args) {
//创建对象并调用里面的 native 方法.
System.out.println(System.getProperty("java.library.path"));
System.out.println("start");
HelloWorld hw = new HelloWorld();
hw.printText();
}
}
2.delphi的实现:
JNI in 'JNI.pas';
procedure Java_HelloWorld_printText(PEnv: PJNIEnv; Obj: JObject); stdcall;
begin
Writeln('您好!看到效果了吧。');
end;
{$R *.res}
exports
Java_HelloWorld_printText;
end.
(注意需要一个JNI的pas文件,网上有啊,随便下,是一个国外的牛人写的)
3.delphi调用dll.开始我将这个dll放在和java工程包的同一个文件夹下,以为这样最省事,结果总是出错:
Exception in thread "main" java.lang.UnsatisfiedLinkError.........
于是我将这个dll system32,system放,还是这个错误。
××××××××××××××××××××××
最后,放在C:/Program Files/Java/jdk1.5.0/jre/bin目录中,哈哈,居然通过。
恭喜,据说这个路径就是所谓的jvm的路