---说明,之前直接百度出来的例子,照猫画虎。没想到的是这例子居然直接来自百度百科,写着写着就囧了。。

---anyway,写完了就当是给自己看吧。

同事求助,就看了一下,照猫画虎一番,略有所得。

JNI是什么?

NI是 Java Native Interface 的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他编程语言,只要调用约定受支持就可以了。使用java与本地已编译的代码交互,通常会丧失平台可移植性。

-- 以上来自百度百科

JNI步骤

① java类中编写带有native 声明的方法。

② 使用 javac 命令编译所编写的java类。

③ 使用 javah 命令生成头文件。

④ 使用C/C++实现本地方法。

⑤ 生成动态连接库。

⑥ 执行(java)。

--还是来自百度百科

JNI实例

 public class HelloWorld {
public native void displayHelloWorld();//所有native关键词修饰的都是对本地的声明
static {
System.loadLibrary("hello");//载入本地库
}
public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
}
}

javac HelloWorld.java

javah HelloWorld

编写本地方法实现和由javah命令生成的头文件里面声明的方法名相同的方法。

  建议用vs,新建 Win Console - DLL 项目,新建文件:HelloWorldImpl.cpp

 #include "jni.h"
#include "HelloWorld.h" //#include other headers JNIEXPORT void JNICALL
Java_HelloWorld_displayHelloWorld(JNIEnv*env,jobject obj)
{
printf("Helloworld!\n");
return;
}

注意,这里使用的是"jni.h",也可以使用<jni.h>。前者将jni.h文件复制进来即可,后者需要在项目中引入其所在的文件夹($JAVA_HOME$/include)。

但是,据我实测,实际上还需要 jni_md.h 文件,要么复制进来,要么引入其所在的文件夹($JAVA_HOME$/include/win32)。

⑤ 如无问题,就可以进行编译了。这里要注意一点,如果jdk是64位版本,那么dll也需要64位的。vs可以直接设置生成的版本。

虽然可以使用单独的命令来生成dll文件,不过这里只是一个练习,直接build项目即可生成,然后在文件夹中就能找到。

⑥ 由于我们在Java中调用的hello,所以需要将该dll复制到java所在的文件夹,并重命名。

    static {
System.loadLibrary("hello");//载入本地库
}

然后,运行即可。

一般来说,如果第三方有提供dll,那可以直接调用执行。

ps:如果不用vs,那也可以使用gcc,参考百度百科

最新文章

  1. MFC窗口乱弹问题
  2. POJ 2096 Collecting Bugs
  3. cocos2dx游戏开发——微信打飞机学习笔记(六)——PlayerLayer的搭建
  4. js时间显示设置
  5. CodeForces 711B Chris and Magic Square (暴力,水题)
  6. WFS
  7. asp.net服务器控件防止多次提交问题
  8. PostgreSQL的存储系统二:REDOLOG文件存储结构二
  9. Yii如何使用数据库
  10. Fundebug支付宝小程序BUG监控插件更新至0.2.0,新增test()方法,报错增加Page数据
  11. C#单元测试,带你快速入门
  12. Spring Boot入门(1)Hello World
  13. 安装PHP ImageMagick笔记
  14. Effective C++ 笔记
  15. shell编程学习笔记(三):Shell中局部变量的使用
  16. 了解ASP.NET Core 依赖注入,看这篇就够了 于2017年11月6日由jesseliu发布
  17. HDU - 5806 NanoApe Loves Sequence Ⅱ 想法题
  18. vs2017使用rdlc
  19. C# 转换Json类
  20. Intellij IDEA常用快捷键和一些配置——Mac版

热门文章

  1. shell 提取mysql指定数据库下表创建语句为单文件
  2. Visual Studio Code 调试 nodejs (断点调试、自动重启、进程调试)
  3. Spring Boot 2.0官方文档之 Actuator(转)
  4. [na]小区网络-pppoe拨号认证原理及部署(panabit来管理)
  5. Apache2.2配置小结.
  6. SparkStreaming操作Kafka
  7. Class.getName和Class.getCanonicalName的区别
  8. Filter详解
  9. Redis Keys 命令 - 查找所有符合给定模式( pattern)的 key
  10. 基于jquery带时间轴的图片轮播切换代码