java 可以反调c++ ldll库进行java语言无法实现的功能
1 准备intellij IDEA(elcipse), JDK, VS2008
2 编写java
package Jni;
public class Jni_Demo {
static{
//调用动态链接库
System.loadLibrary("JniDemo");
}
//定义一个本地方法
public native String sayHello(String name);
public static void main(String[] args) {
Jni_Demo jniDemo = new Jni_Demo();
String message = jniDemo.sayHello("zhangsan");
System.out.println(message);
}
}
2 生成c++头文件
进入out 目录:
打包名+ 类名
目录结构
Jni/Jni/Jni_Demo.java
E:\java\Jni\out\production\Jni>javah -jni Jni.Jni_Demo
3 拷贝头文件到vs工程
C:\Program Files\Java\jdk1.8.0_171\include\jni.h
C:\Program Files\Java\jdk1.8.0_171\include\win32\jni_md.h
注意:将生成的头文件#include 《jni.h》 改成 "jni.h"
#include "jni.h"
#include "Jni_Jni_Demo.h"
#include <string>
JNIEXPORT jstring JNICALL Java_Jni_Jni_1Demo_sayHello
(JNIEnv * env, jobject, jstring name)
{
printf("Hi,World!");
const char* pname = env->GetStringUTFChars(name,false);
std::string dname = pname;
std::string Welcome="Welcome" + dname ;
return env->NewStringUTF(Welcome.c_str());
}
生成dll动态库,拷贝到指定目录,将该目录加入到环境变量 path中,java IDE启动就会加载该目录(也可以Load方法加载绝对路径)
5 效果;
注意事项: jdk(elcipse/IntelliJ idea) 和 visual 编译的的版本必须一直(都是x86 或者都是x64)