JNI实现简单HelloWorld的Demo
来源:互联网 发布:阿里云os手机好用吗 编辑:程序博客网 时间:2024/05/16 02:57
JNI实现简单HelloWorld的Demo
功能:利用JNI接口调用C++中实现的HelloWorld!
环境:VS2013、Eclipse
步骤:
1) 完成Java代码,编写好Java调用类
package com.sample.test;public class HelloWorld { public static void main(String[] args) { // TODO Auto-generated method stub new HelloWorld().display(); } public native void display();//声明一个native方法,但不实现,在C++中实现这个方法 static { //加载名为HelloWorld的dll文件 System.loadLibrary("HelloWorld"); }}
2)编译你的Java类
javac HelloWorld.java
3)用javah生成编译好的class文件对应的C/C++ 函数的头文件
javah -classpath E:\code\Eclipse\NativeInterface\src -jni com.sample.test.HelloWorld
- 这里要注意命令的格式,
-classpath
指的是package所在的目录,而不是这个类所在的目录,-jni
后面要带上package的名称,可以简写为:
javah -cp ..\..\.. -jni test.HelloWorld
4) 实现头文件中的函数原型,编写native代码
- 在VS2013中新建立一个HelloWorld的win32项目
- 确定,选择下一步,选择dll,完成创建
将
jni.h
和刚生成的com_sample_test_HelloWorld.h
拷贝到建立的工程目录下。将
dllmain.cpp
中的内容复制到HelloWorld.cpp
中,并删除dllmain.cpp
将
com_sample_test_HelloWorld.h
中的头文件#include <jni.h>
改为#include "jni.h"
HelloWorld.cpp
中的内容为:
#include "stdafx.h"#include "com_sample_test_HelloWorld.h"//这一段是dllmain.cpp中本来的内容BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ){ switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE;}//在这里实现这个方法JNIEXPORT void JNICALL Java_com_sample_test_HelloWorld_display(JNIEnv *, jobject){ printf("Hello World!\n");}
5) 将native代码编译打包成DLL库(win32)或共享库(Linux)
- 生成解决方案,即可在工程目录下面找到
HelloWorld.dll
,将这个文件复制到java目录(即与src相同的位置)下面
6)将你的Java代码跑起来
- 在Eclipse中运行原来的java代码,即可查看结果:
- 注意
- 如果最后出现错误,不能运行,请注意版本问题,我使用的是
×64生成的Realease版本的dll
0 0
- JNI实现简单HelloWorld的Demo
- JNI简单实现demo
- JNI简单实现Java调用C++/C的HelloWorld
- JNI简单实现Java调用C++/C的HelloWorld
- JNI简单实现Java调用C++/C的HelloWorld
- 用Jersey简单实现的helloworld demo版
- grpc java helloworld 简单demo实现
- grpc java helloworld 简单demo实现
- grpc java helloworld 简单demo实现
- Android下的JNI简单实例HelloWorld
- JNI HelloWorld 简单记录
- JNI实现HelloWorld
- 简单的JNI实现
- JNI开发的一个简单Demo
- dwr实现简单的helloWorld
- Java JNI 简单介绍 HelloWorld
- Andriod 中JNI的简单应用(HelloWorld)
- JNI HelloWorld的例子
- 数据类型的笔记
- 内存四区的笔记
- R基础(个人笔记)
- Java学习笔记之设计模式原则
- CMTime详解-AVFoundation视频操作必备基础
- JNI实现简单HelloWorld的Demo
- HashMap的实现原理
- 杂项
- 开发中碰到的问题:IllegalStateException: Can not perform this action after onSaveInstanceState
- 关于tesseract-ocr原理的几篇论文
- 快速理解Kafka分布式消息队列框架
- Java反射学习
- Binary Tree Level Order Traversal
- Java动态绑定机制原理分析