JNI HelloWorld 亲测可以。

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还是不错的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值