1、java jni 就是可以调用,也只能调用c,c++写的方法。
2、我首先声明一个类,此类中包含有本地接口的声明,比如:
private static native void sayHello();
private static native void showMessageBox(String msg);
然后类编译通过。
这个时候生成c++代码的原型,也就是c++方法中的签名,通过javah -jni 类名来生成头文件,也就是.h文件,也就是上面的那个类中的方法签名,
生成头文件引用了jni.h,jni.h又引用了其它头文件,jni.h,jni_md.h,jawt_md.h这三个头文件存在java的bin目录下,它们定义了
一些变量、参数的,利用javah -jni命令生成的头文件引用了jni.h。
如果用vs2010 c++环境,则把这三个头文件,复制到D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include下面。
然后再vs2010 下建项目win32 项目,然后选择dll。把javah -jni生成的头文件拷贝过去,然后再在cpp文件中实现。
最后把生成的dll,拷贝到java.library.path下,比如jdk的bin目录下,然后运行程序成功。
public class JndiTest {
private static final String DLL_NAME = "TestJndi";
static{
System.loadLibrary(DLL_NAME);
}
private static native void sayHello();
private static native void showMessageBox(String msg);
private static void sayHello(String msg){
System.out.println("你好:"+msg);
}
public static void main(String[] args) {
//System.out.println(System.getProperty("java.library.path"));
System.out.println("测试jndi,调用c++的函数");
sayHello();
sayHello("呆呆");
showMessageBox("iloveyou");
}
}
vs2010工程下载地址:http://download.csdn.net/detail/qqqwwwqw/6572619
jnative调用dll,另外的地址:http://tvjody.iteye.com/blog/125643
J/Direct,java/com 都是要在微软的java 虚拟机上才支持。
考虑到vs2010编译出来的代码是在32位下运行,因此jdk也需选择在32位的jdk下运行。
2、我首先声明一个类,此类中包含有本地接口的声明,比如:
private static native void sayHello();
private static native void showMessageBox(String msg);
然后类编译通过。
这个时候生成c++代码的原型,也就是c++方法中的签名,通过javah -jni 类名来生成头文件,也就是.h文件,也就是上面的那个类中的方法签名,
生成头文件引用了jni.h,jni.h又引用了其它头文件,jni.h,jni_md.h,jawt_md.h这三个头文件存在java的bin目录下,它们定义了
一些变量、参数的,利用javah -jni命令生成的头文件引用了jni.h。
如果用vs2010 c++环境,则把这三个头文件,复制到D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include下面。
然后再vs2010 下建项目win32 项目,然后选择dll。把javah -jni生成的头文件拷贝过去,然后再在cpp文件中实现。
最后把生成的dll,拷贝到java.library.path下,比如jdk的bin目录下,然后运行程序成功。
具体的java例子:
public class JndiTest {
private static final String DLL_NAME = "TestJndi";
static{
System.loadLibrary(DLL_NAME);
}
private static native void sayHello();
private static native void showMessageBox(String msg);
private static void sayHello(String msg){
System.out.println("你好:"+msg);
}
public static void main(String[] args) {
//System.out.println(System.getProperty("java.library.path"));
System.out.println("测试jndi,调用c++的函数");
sayHello();
sayHello("呆呆");
showMessageBox("iloveyou");
}
}
vs2010工程下载地址:http://download.csdn.net/detail/qqqwwwqw/6572619
jnative调用dll,另外的地址:http://tvjody.iteye.com/blog/125643
J/Direct,java/com 都是要在微软的java 虚拟机上才支持。
考虑到vs2010编译出来的代码是在32位下运行,因此jdk也需选择在32位的jdk下运行。