JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)
便想,既然底层用的C,那为什么还能跨平台(现在感觉跨平台这个特性其实已经不怎么用了),一想高斯林老爷子用了一个JVM,这样只要不同操作系统对应的JVM里有相应的方法实现就可以了。
然后准备写一个 JNI HelloWorld:
public class HelloWorld {
public native void displayHelloWorld();//所有native关键词修饰的都是对本地的声明
static {
System.loadLibrary("hello");//载入本地库
}
public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
}
}
没想到Javac HelloWorld.java 竟然报错:
J:\MAKER\Java源码\JNI尝试>javac Helloworld.java
Helloworld.java:2: error: unmappable character for encoding GBK
public native void displayHelloWorld();//鎵?鏈塶ative鍏抽敭璇嶄慨楗扮殑閮芥槸瀵规湰鍦扮殑澹版槑
^
Helloworld.java:4: error: unmappable character for encoding GBK
System.loadLibrary("hello");//杞藉叆鏈湴搴?
^
Helloworld.java:1: error: class, interface, or enum expected
锘縫ublic class HelloWorld {
^
3 errors
HelloWorld.java是以UTF-8格式编码的,windows在中国用的是GBK编码,(用Windows建立一个文本文档,其默认字符集就是GBK),因此出现的编码错误
关于编码请看:https://blog.csdn.net/cszhang570221322/article/details/84786918
以ASCII拓展码保存后,再编译:
javah HelloWorld 生成.h文件
HelloWorld.h文件的内如:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: displayHelloWorld
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
这个h文件相当于java里的接口,声明了一个Java_HelloWorld_displayHelloWorld(JNIEnv *,jobject) 方法;
然后我们用C编写这个方法的实现: HelloWorldImpl.cpp
这时候用VC新建一个dll工程:
将HelloWorld.h和HelloWorldImpl.c 文件移入:
然后需要将引用库引入项目路径:
然后还报找不到jni.h错误,这是因为#include<jni.h>这个是从系统目录中查找jni.h头文件的,而我们只把jni.h拷贝到工程目录中,所以需要将<jni.h> 改为 "jni.h"
此时要记得java是64位的,也要编译64位的dll文件。
此时该有的都有了,如果用vc6不行的话,现在大家都用vs20xx,教程移步:http://jingyan.baidu.com/article/380abd0a4640171d90192c9e.html
他还报错:
需要下载 对应64位的<DLL依赖查看工具> 怪不得windows需要装那么多复杂的运行库。
运行发现少那么多dll文件,
没得办法,我一个个下载。
惊喜的是,我在下载了
这两个dll之后,虽然还有?的dll依赖,但竟然运行成功了。
正准备用那个国外的dll修复工具一个个修复呢? 链接如下: http://dl2.3dmgame.com/akuka/3DMGAME-dllcare.v1.0.0.2266.cn.ban.rar https://dl.3dmgame.com/patch/121375.html这个是破解教程
另外 :http://www.zhaodll.com/ 这个网站下载dll还是不错的。